行預取(row_prefetch)
行預取可以減少fetch的次數,並降低一致性讀.
SQL> create table row_prefetch(id int); 表已建立。 SQL> insert into row_prefetch select level from dual connect by level<=1000000; 已建立1000000行。 SQL> commit; ******************************************************************************** SQL> show arraysize arraysize 15 select * from row_prefetch where rownum<100 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 8 0.00 0.00 0 11 0 99 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 10 0.00 0.00 0 11 0 99 SQL> set arraysize 100 SQL> show arraysize 100 arraysize 100 select * from row_prefetch where rownum<100 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 0 5 0 99 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 5 0 99
在sqlplus 通過arraysize設定。
在pl/sql中的表現為:
For varR In (SELECT * FROM CURSOR_TEST) 這種隱式遊標的使用,預設為100,相當於顯示遊標bulk collect into recs limit 100。
在jdbc中:
為連線設定defaultRowPrefetch屬性值,
connectionProperties=new Properties();
connectionProperties.put("...","...");
connectionProperties.put("defaultRowPrefetch","100");
dataSource.setConnectionProperties(connectionProperties);
或者在執行sql前設定:
Statement.setFetchSize(100);