Oracle 10gR2 查詢資料的方法
在Oracle 10g有幾種查詢資料的方法,瞭解這些查詢資料的方法,有利於我們讀懂執行計劃,並透過執行計劃來最佳化我們的ORacle資料庫系統。
查詢資料主要有一下方式:
1,全表掃描和RowId查詢資料
2,透過索引查詢資料
1.1 全表掃描(Full Table Scans)
有時Oracle資料庫在評估最優執行計劃時,當去取大量資料時,就會優先考慮使用全表掃描,因為這時全表掃描是最優的。一般取出的資料佔表的資料5%--10%左右會發生表掃描,一般在OLTP系統中儘量避免表掃描。
為了更好的使用表掃描,提高效率,在oracle 中有好幾種分割槽方法,提高表掃描的效率,讓表按具體業務邏輯來分割槽,儘量做到分割槽消除,減少表掃描的大小,提高效能。
1.2 ROWID查詢資料(Table Access by ROWID 或 Rowid lookup)
行ROWID是行資料在資料庫檔案,資料塊和行在塊的具體位置,所以是Oracle最快的定位方法。
這種方法只能一次讀取一個IO,不會涉及多個IO。
目前透過索引查詢,主要有5種索引查詢方式:
1,索引唯一查詢(index unique scan)
2,索引範圍查詢 (index range scan)
3,索引全部掃描 (index full scan)
4,索引快速掃描 (index fast full scan)
5,索引跳躍式查詢 (index skip scan)
2.1 ,索引唯一查詢(index unique scan)
當查詢列是 如果存在UNIQUE 或PRIMARY KEY 約束(它保證了語句只存取單行)的話,Oracle經常實現唯一性掃描。此查詢方法效率很高。
2.2 ,索引範圍查詢 (index range scan)
使用一個索引存取多行資料,在唯一索引上使用索引範圍掃描的典型情況下是在謂詞(where限制條件)中使用了範圍運算子(如>、、>=、<=、between)
2.3, 索引全部掃描 (index full scan)
全索引掃描。對查詢出的資料進行排序,而且此時查詢出的資料都必須從索引中可以直接得到。同時order by排序的資料應該是按索引的順序來讀取的。如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->explain plan for select empno,ename from big_emp order by empno,ename
2.4,索引快速掃描 (index fast full scan)
與 index full scan很類似,但是一個顯著的區別就是它不對查詢出的資料進行排序,即資料不是以排序順序被返回,在這種存取方法中,可以使用多塊讀功能,也可以使用並行讀入,以便獲得最大吞吐量與縮短執行時間,索引快速全域性掃描,不帶order by情況下常發生,如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
--> explain plan for select empno,ename from big_emp
2.5, 索引跳躍式查詢 (index skip scan)
where條件列是非索引的前導列情況下常發生。如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->create index i_emp on emp(empno, ename);
select /*+ index_ss(emp i_emp)*/ job from emp where ename='SMITH';
總結:
index full scan (索引全掃描):有排序,就是利用到了index的排序功能。原理:透過root根級----到中間級---葉級
index fast full scan (索引快速掃描): 無排序,就可以利用多塊讀取方式,提高查詢速度,因為資料要求是無序的。即可以使用多塊查詢,取出的資料就是資料存放的順序。
當進行index full scan的時候 oracle定位到索引的root block,然後到branch block(如果有的話),再定位到第一個leaf block, 然後根據leaf block的雙向連結串列順序讀取。它所讀取的塊都是有順序的,也是經過排序的。
而index fast full scan則不同,它是從段頭開始,讀取包含點陣圖塊,root block,所有的branch block, leaf block,讀取的順序完全有物理儲存位置決定,並採取多塊讀,沒次讀取db_file_multiblock_read_count個
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1442529/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE使用者常用資料字典的查詢使用方法Oracle
- Oracle 查詢多個資料Oracle
- oracle date資料的條件查詢Oracle
- Oracle資料庫的查詢變慢了Oracle資料庫
- Oracle提高查詢效率的方法Oracle
- ORACLE-使用者常用資料字典的查詢使用方法Oracle
- ORACLE使用者常用資料字典的查詢使用方法(轉)Oracle
- 資料庫資料的查詢----連線查詢資料庫
- 查詢前10條資料oracleOracle
- Oracle資料庫中的分頁查詢Oracle資料庫
- ORACLE高水位表的查詢方法Oracle
- django對資料庫查詢基本方法Django資料庫
- Oracle 資料字典及註釋查詢Oracle
- 關於Oracle資料庫的時間查詢Oracle資料庫
- oracle重複資料的查詢及刪除Oracle
- 查詢Oracle資料檔案的使用情況Oracle
- Oracle查詢重複資料與刪除重複記錄方法Oracle
- 回閃查詢查詢刪除的資料
- Flask——資料的查詢Flask
- mysql資料庫連表查詢的幾種方法MySql資料庫
- 解析MSSQL跨資料庫查詢的實現方法SQL資料庫
- QL Server 百萬級資料提高查詢速度的方法Server
- Android SQL資料庫查詢方法 query( )AndroidSQL資料庫
- 優化SQL Server資料庫查詢方法優化SQLServer資料庫
- ORACLE查詢欄位中含有空格的資料Oracle
- Oracle資料庫的閃回查詢功能簡介Oracle資料庫
- 提高ORACLE資料庫的查詢統計速度(轉)Oracle資料庫
- 使用oracle 閃回查詢找回誤更新的資料Oracle
- 【TABLESPACE】Oracle資料庫預設永久表空間的查詢及刪除方法Oracle資料庫
- oracle資料庫建立Squence序列並查詢Oracle資料庫
- Oracle查詢前100萬條資料Oracle
- (轉)Oracle常用資料字典查詢語句Oracle
- oracle 資料分頁查詢 (轉貼收集)Oracle
- MySQL - 資料查詢 - 簡單查詢MySql
- B樹查詢,磁碟查詢資料
- 資料庫 - 資料查詢資料庫
- 統計Oracle 查詢事務數的方法Oracle
- oracle資料庫sql查詢檢視第二次查詢很慢Oracle資料庫SQL