Oracle 12c中新增通過ROWID BATCHED訪問數(shù)據(jù)塊的方式,優(yōu)化原來使用單個rowid進(jìn)行數(shù)據(jù)塊訪問方式帶來的資源消耗及對數(shù)據(jù)塊的掃描次數(shù),即TABLE ACCESS BY INDEX ROWID BATCHED特性。該特性通過隱藏參數(shù)“ _optimizer_batch_table_access_by_rowid ”控制,默認(rèn)值為 true ,即默認(rèn)開啟。
成都創(chuàng)新互聯(lián)公司提供高防主機(jī)、云服務(wù)器、香港服務(wù)器、雅安電信機(jī)房等
以下是 SELECT * FROM employees WHERE employee_id > 190;的執(zhí)行計(jì)劃部分內(nèi)容。
--------------------------------------------------------------------------------
|Id| Operation | Name |Rows|Bytes|Cost(%CPU)|Time|
--------------------------------------------------------------------------------
| 0| SELECT STATEMENT | | | |2(100)| |
| 1| TABLE ACCESS BY INDEX ROWID BATCHED|EMPLOYEES |16|1104|2 (0)|00:00:01|
|*2| INDEX RANGE SCAN |EMP_EMP_ID_PK|16| |1 (0)|00:00:01|
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("EMPLOYEE_ID">190)
以上執(zhí)行計(jì)劃的步驟 2顯示了 hr.employees 表上 emp_emp_id_pk 索引的范圍掃描。 數(shù)據(jù)庫使用從索引獲取的 rowid 來查找 employees 表中的相應(yīng)行,然后檢索它們。 步驟 1 中顯示使用從索引中檢索的 rowid進(jìn)行BATCHED訪問,數(shù)據(jù)庫將對從索引中檢索的rowid進(jìn)行排序,然后按塊順序訪問行,從而減少數(shù)據(jù)庫必須訪問的塊的次數(shù)以降低資源的消耗。