微課sql最佳化(10)、關於資料訪問方法
1、Table Access Operations
在Oracle資料庫中SQL訪問表的資料有2種方式:
- TABLE ACCESS FULL、
-
TABLE ACCESS BY ROWID
- Full Table Scans
全表掃描使用多塊讀,透過引數db_file_multiblock_read_count設定單次IO可以讀取的資料塊數。
當Oracle伺服器使用序列全表掃描讀取塊時,他們使用least
recently used(LRU)的緩衝區快取LRU列表。對於parallel(並行)掃描,當查詢資料塊不在緩衝區時,資料塊的讀寫採用direct I/O方式直接讀入子查詢程式的PGA中。
如果查詢行數較多(超過10%)或使用並行查詢時使用全表掃描會比較高效。否則,索引掃描會比較高效。
高水位是表中最後一個使用的資料塊。如果刪除表中的資料,該表的所有資料塊或部分資料塊可能為空,但全表掃描仍然會讀該塊。即全表掃描從高水位以下讀取,最佳化方法,降低高水位。
- Table Access by ROWID
先訪問索引獲取ROWID,然後使用ROWID獲取需要的業務資料。
2、Index Access Operations
-
Index Unique Scan
該索引查詢是基於constraints or unique indexes,查詢結果為唯一值,或無查詢結果。
- Index Range Scan
該索引查詢是基於所有nonunique index,可能有多個結果返回,使用的謂詞查詢條件為(for example: BETWEEN, < or >)。
- Index Full Scan
索引全掃描返回排序後的資料,透過CBO判定索引全掃描的訪問方法比全表掃描後再排序更
高效,但索引全掃描不能使用多塊讀。
- Index Fast Full Scan
使用基於CBO時,才會出現Index fast full scan。
只有當至少一個列的索引不為空時,Oracle伺服器使用index full scan (否則無法保證所有列會被查詢出來)
- Index fast full scan
可以使用多塊讀和並行操作,但不一定會按照順序返回資料。當索引包含所有需要查詢的列時,會使用Index fast full scan。Index fast full scans不返回ROWID,進行回表查詢,因為該操作不需要沒有意義。
- Index skip scan
當查詢條件沒有指定前導列,並且指定非前導列時出現。Index skip scan在邏輯上將複合索引劃分為更小的子索引。邏輯索引分割槽的數量取決於前導列distinct values數量
。前導列distinct values越小效能越好,否則效能越差。例如,假設您有以下(性別、
EMPLOYEE_ID)索引資料:
(' F ',98)
(' F ',100)
(' F ',102)
(' F ',104)
(' M ',101)
(' M ',103)
(' M ',105)
該索引在邏輯上分為以下兩個字索引:
——第一個子索引F鍵值。
——第二個子索引M鍵值。
性別列是跳過以下查詢:
SQL > select *
2 from employees
3 where employee_id = 101;
不執行完整的索引掃描。相當於以下執行,
首先執行: select * from employees where employee_id = 101 and GENDER='F' ;
然後執行:select * from employees where employee_id = 101 and GENDER='M' ;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2678261/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微課sql最佳化(15)、表的連線方法(4)-關於Hash Join(雜湊連線)SQL
- 微課sql最佳化(7)、統計資訊收集(5)-關於直方圖SQL直方圖
- 微課sql最佳化(16)、表的連線方法(5)-關於Merge Join(排序合連線)SQL排序
- 微課sql最佳化(6)、統計資訊收集(4)-關於動態取樣SQL
- 微課sql最佳化(14)、表的連線方法(3)-關於Nested Loops Join(巢狀迴圈)SQLOOP巢狀
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- 微課sql最佳化(5)、統計資訊收集(3)-關於預設取樣率SQL
- 關於jsp 呼叫bean 訪問sql-server資料庫問題JSBeanSQLServer資料庫
- SQL資料庫查詢最佳化技巧提升網站訪問速度的方法SQL資料庫網站
- 微課sql最佳化(13)、表的連線方法(2)-基礎概念SQL
- 微課sql最佳化(12)、表的連線方法(1)-幫助網友最佳化報表SQLSQL
- 微課sql最佳化(4)、幫助“表姐”最佳化報表SQL
- 微課sql最佳化(1)、基礎概念介紹SQL
- 關於python訪問字典的方法Python
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 微課sql最佳化(11) 、如何檢視執行計劃SQL
- SQL Server 資料訪問策略:CLRMESQLServer
- 微課sql最佳化(2)-為什麼需要收集統計資訊SQL
- SQL Server 資料訪問策略:即席SQLCUSQLServer
- 使用Vert.x最佳化關聯式資料庫PostgreSQL訪問 | foojay資料庫SQL
- 網站訪問變慢最佳化,淺析10種網站訪問變慢最佳化方法的作用網站
- 訪問HyperSQL資料庫的方法SQL資料庫
- 關於WebLogic 訪問Oracle 資料庫(建立連線池)問題WebOracle資料庫
- 大型網站資料庫及資料訪問最佳化(轉)網站資料庫
- 關於SQL Server資料查詢基本方法的總結SQLServer
- 關於多執行緒訪問靜態方法的問題執行緒
- 2 Day DBA-管理方案物件-監控和優化資料庫-關於SQL指導-SQL訪問指導物件優化資料庫SQL
- 訪問資料庫的幾種方法資料庫
- 微課sql最佳化(3)、統計資訊收集(2)-如何收集統計資訊SQL
- 微課sql最佳化(8)、統計資訊收集(6)-統計資訊查詢SQL
- SpringMVC下關於靜態資源訪問SpringMVC
- 課時45:魔法方法:屬性訪問
- 關於SQL Server通過OLEDB訪問ORACLE資料表涉及CLOB或BLOB欄位的錯誤提示SQLServerOracle
- 高效的SQL語句有助於減少資料庫的訪問次數SQL資料庫
- SQL Server通過dblink訪問Oracle資料SQLServerOracle
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- oracle10g database vault 訪問Realms相關的資料字典OracleDatabase
- 關於訪問資料庫的使用者名稱和密碼資料庫密碼