PL/SQL中繫結變數使用的簡單測試
透過以下簡單的實驗可以理解繫結變數的作用,對比SQL語句在不使用和使用繫結變數情況下的解析執行情況。
建立測試表
create table scott.t1(i number);
檢視當前會話的解析次數統計
select name, value from v$mystat natural join v$statname where name like 'parse%'; NAME VALUE ---------------------------------------------------------------- ---------- parse time cpu 0 parse time elapsed 0 parse count (total) 23 parse count (hard) 2 parse count (failures) 0 parse count (describe) 0
不使用繫結變數執行插入
begin for i in 1 .. 10 loop execute immediate 'insert into scott.t1 values(' || i || ')'; end loop commit; end; /
檢視當前會話的解析次數統計,硬解析的增加
select name, value from v$mystat natural join v$statname where name like 'parse%'; NAME VALUE ---------------------------------------------------------------- ---------- parse time cpu 3 parse time elapsed 2 parse count (total) 38 parse count (hard) 13 parse count (failures) 0 parse count (describe) 0
透過檢視v$sqlarea檢視SQL語句的解析執行統計,可以看到這些不能共享的SQL,每條語句都只執行了一次。重複的解析資源消耗,也佔用了共享記憶體空間來儲存這些不同的SQL程式碼。
col sql_text for a50 select sql_text, version_count, parse_calls, executions from v$sqlarea where sql_text like 'insert into scott.t1%'; SQL_TEXT VERSION_COUNT PARSE_CALLS EXECUTIONS -------------------------------------------------- ------------- ----------- ---------- insert into scott.t1 values(8) 1 1 1 insert into scott.t1 values(6) 1 1 1 insert into scott.t1 values(2) 1 1 1 insert into scott.t1 values(10) 1 1 1 insert into scott.t1 values(4) 1 1 1 insert into scott.t1 values(5) 1 1 1 insert into scott.t1 values(9) 1 1 1 insert into scott.t1 values(1) 1 1 1 insert into scott.t1 values(7) 1 1 1 insert into scott.t1 values(3) 1 1 1
重構測試表,對比第二次測試
drop table scott.t1 purge; create table scott.t1(i number);
檢視當前會話的解析次數統計
select name, value from v$mystat natural join v$statname where name like 'parse%'; NAME VALUE ---------------------------------------------------------------- ---------- parse time cpu 8 parse time elapsed 16 parse count (total) 132 parse count (hard) 20 parse count (failures) 0 parse count (describe) 0
使用繫結變數執行插入
begin for i in 1 .. 10 loop execute immediate 'insert into scott.t1 values(:v1)' using i; end loop commit; end; /
檢視當前會話的解析次數統計,硬解析明顯減少
select name, value from v$mystat natural join v$statname where name like 'parse%'; NAME VALUE ---------------------------------------------------------------- ---------- parse time cpu 10 parse time elapsed 17 parse count (total) 138 parse count (hard) 22 parse count (failures) 0 parse count (describe) 0
檢視SQL語句的解析執行統計,使用繫結變數的SQL解析一次,執行了10次,這就是繫結變數的優勢所在。
col sql_text for a50 select sql_text, version_count, parse_calls, executions from v$sqlarea where sql_text like 'insert into scott.t1%'; SQL_TEXT VERSION_COUNT PARSE_CALLS EXECUTIONS -------------------------------------------------- ------------- ----------- ---------- insert into scott.t1 values(8) 1 1 1 insert into scott.t1 values(6) 1 1 1 insert into scott.t1 values(2) 1 1 1 insert into scott.t1 values(10) 1 1 1 insert into scott.t1 values(4) 1 1 1 insert into scott.t1 values(5) 1 1 1 insert into scott.t1 values(9) 1 1 1 insert into scott.t1 values(1) 1 1 1 insert into scott.t1 values(:v1) 1 1 10 insert into scott.t1 values(7) 1 1 1 insert into scott.t1 values(3) 1 1 1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2138279/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 繫結變數窺視測試案例變數
- 使用profiler測試Oracle PL/SQL效能OracleSQL
- Oracle中如何查詢未使用繫結變數的SQL語句?Oracle變數SQL
- V$sql查詢未使用繫結變數的語句SQL變數
- 在繫結變數下使用outline變數
- 讓 API 測試變的簡單API
- PL/SQL基本結構---PLSQL複合型別---表型別變數tableSQL型別變數
- openGauss關於PL/SQL匿名塊呼叫測試SQL
- 透過v$sql_bind_capture 檢視繫結變數。SQLAPT變數
- 如何在對in操作使用變數繫結(轉)變數
- Oracle PL/SQL塊簡介OracleSQL
- Oracle 的PL/SQL語言使用OracleSQL
- Jmeter效能測試簡單使用JMeter
- 簡單介紹nginx 變數使用Nginx變數
- PL/SQL第一章--概述及變數型別SQL變數型別
- 使用PL/SQL找到兩個表中的相似值FKSQL
- [20211227]抽取跟蹤檔案中的繫結變數值.txt變數
- 介面測試--apipost變數使用(一)API變數
- 如何用FGA得到繫結變數的值變數
- 【PG效能測試】pgbench效能測試工具簡單使用
- MySQL高階特性——繫結變數MySql變數
- [20180930]in list與繫結變數.txt變數
- [20180912]PLSLQ與繫結變數.txt變數
- Vue select 繫結動態變數Vue變數
- 單元測試內實現屬性自動繫結
- sql注入簡單總結SQL
- [20240607]PL/SQL中sql語句的註解.txtSQL
- [20180930]in list與繫結變數個數.txt變數
- [20210120]in list與繫結變數個數.txt變數
- 簡單介紹SQLserver中的declare變數用法SQLServer變數
- InnoSetup簡單教程一,安裝使用和簡單測試
- 簡單的 ping 測試
- Oracle PL/SQL程式碼中的註釋OracleSQL
- angular雙向繫結簡單實現Angular
- 【ORACLE】Oracle繫結變數知識梳理Oracle變數
- 引數繫結在PHP程式碼測試中的重要作用與應用場景PHP
- PL/SQL 宣告SQL
- Oracle PL/SQLOracleSQL
- 建立簡單的表測試