23c 新特性之SQL_transpiler
描述
介紹
有時我們需要查詢的選擇列表中的函式。這些可能是內建的函式,或者是我們自己編碼的函式。預設操作是為查詢返回的每一行呼叫函式。如果函式是確定性的,那麼對於相同的輸入引數簽名,它會給出相同的輸出,並且與處理的行數相比,使用的引數簽名數較低,這可能會浪費很多資源效率。
Oracle23c 中的自動 SQL_transpiler 允許將一些函式轉換為 SQL 表示式,以減少 SQL 中函式呼叫的開銷。我們使用 WHERE 子句中的一個函式作為過濾器來查詢表。執行計劃中的謂詞資訊顯示該函式被用作篩選器。
的應用
開關後,Oracle 自動將函式轉化為SQL 表示式。對於高頻操作,可極大程度降低函式呼叫,降低爭用,同時還能一定程度上提升效能。
測試
測試函式建立
SQL> conn roger/roger@enmopdb1 Connected. SQL> create table t0710 ( 2 a number, 3 b number, c number ); 4 5 Table created. SQL> insert into t0710 values (1, 2, 3), (2, 20, 30), (3, 200, 300); 3 rows created. SQL> commit; Commit complete. SQL> create or replace function add_numbers(p1 in number, p2 in number) 2 return number as 3 begin 4 return p1 + p2; 5 end; 6 / Function created.
開啟前後執行計劃對比
不開啟SQL_transpiler
SQL> select a, b, c from t0710 where add_numbers(b, c) = 500; A B C ---------- ---------- ---------- 3 200 300 Execution Plan ---------------------------------------------------------- Plan hash value: 925956317 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 39 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T0710 | 1 | 39 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("ADD_NUMBERS"("B","C")=500) SQL> alter system flush shared_pool; System altered. SQL> alter session set sql_transpiler=on; Session altered. SQL> select a, b, c from t0710 where add_numbers(b, c) = 500; A B C ---------- ---------- ---------- 3 200 300 Execution Plan ---------------------------------------------------------- Plan hash value: 925956317 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 39 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS FULL| T0710 | 1 | 39 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("B"+"C"=500)
此時Oracle 自動將函式轉化為SQL 表示式
執行效率對比
不開啟SQL_transpiler
SQL> alter system flush shared_pool; System altered. SQL> set timing on SQL> declare 2 c number; 3 begin for i in 1 . 4 . 500000 loop select count(1) into c from t0710 where add_numbers(b, c) = 500; 5 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:25.19
開啟SQL_transpiler
SQL> alter system flush shared_pool; System altered. Elapsed: 00:00:00.12 SQL> alter session set sql_transpiler=on; Session altered. Elapsed: 00:00:00.00 SQL> declare 2 c number; 3 begin 4 for i in 1 .. 500000 loop 5 select count(1) into c from t0710 where add_numbers(b, c) = 500; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:16.17
此處測試開啟 sql_transpiler ,執行效率提升大約 36% ,開啟 sql_transpiler 開關後 ,Oracle 自動將函式轉化為 SQL 表示式。對於高頻操作,可極大程度降低函式呼叫,降低爭用,同時還能一定程度上提升效能。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/23825935/viewspace-3004477/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 23c 新特性之實時SQL計劃管理SQL
- 23C新特性SQL防火牆 (SQL Firewall)SQL防火牆
- Oracle 23C Free下載安裝及新特性Oracle
- Oracle Database 23c Beta 釋出,增加 300 多個新特性OracleDatabase
- 10G新特性筆記之安裝新特性筆記
- 【MySQL】5.7新特性之四MySql
- 【MySQL】5.7新特性之五MySql
- 【MySQL】5.7新特性之六MySql
- 【MySQL】5.7新特性之七MySql
- C++ 11 新特性之容器相關特性C++
- 10G新特性筆記之備份恢復新特性筆記
- JDK8新特性之stream()JDK
- HTML5 新特性之 WebsocketHTMLWeb
- Java8新特性之:OptionalJava
- Java 8 新特性之方法引用Java
- ES6 新特性之SymbolSymbol
- MySQL 8 新特性之Clone PluginMySqlPlugin
- Java 10 新特性之 AppCDSJavaAPP
- C++11 新特性之 lambdaC++
- C++ 11 新特性之ClassC++
- IOS11新特性之maskedCornersiOS
- Oracle 12c新特性之Sequence的Session特性OracleSession
- 實戰10g新特性之RMAN TSPITR特性
- ?Java8新特性之Optional類Java
- JDK 1.8 新特性之Lambda表示式JDK
- java8 新特性之方法引用Java
- java8 新特性之Optional 類Java
- JDK 9新特性之Flow API 初探JDKAPI
- 開心檔之Java 9 新特性Java
- Java8 新特性之 Optional 類Java
- JDK8新特性之Stream流JDK
- css3新特性之動畫使用CSSS3動畫
- JDK5.0新特性之:列舉JDK
- Oracle 11g 新特性之DRCPOracle
- Oracle11g新特性之editionOracle
- Spring 2.5.6新特性之packagesToScanSpringPackage
- Teradata新特性之reset when使用
- Oracle 11g新特性之SecureFilesOracle