Oracle索引HINT的使用
儲存在資料庫中資料的分佈情況開發人員或管理員比Oracle最佳化器更加的清楚,在最佳化器不能作出最有查詢路徑選擇的情況下,使用HINT(提示)人為的固定查詢路徑,一定程度能生成更優的執行計劃。
在SQL的查詢過程中,索引是快速查詢資料的方法之一,是最重要、最常見的手段,這篇文章將討論和索引相關的HINT的使用。
1.HINT的使用方法:
select /*+ INDEX (tab pk_tab)*/ * from test.tab;
上面是一個使用HINT簡單例子,其中tab是表的名稱,pk_tab是索引的名稱,如果表有別名,那麼應該使用別名。如果表名的前面包含模式名,那麼在INDEX的使用過程中不需要指定模式的名稱,只需要指定表名即可。
2.HINT提示:
在Oracle資料庫中索引的使用包括:索引範圍掃描、索引跳躍掃描、索引快速全掃描。下面討論Oracle資料庫有關索引的提示,如下表所示,列出了不同掃描方法是用的提示:
索引
索引範圍掃描
索引跳躍掃描
索引快速全掃描
index
index_rs
index_ss
index_ffs
index_asc
no_index_rs
no_index_ss
no_index_ffs
index_desc
index_rs_asc
index_ss_asc
index_asc
index_rs_desc
index_ss_desc
index_desc
下面舉例說明不同索引HINT的使用:
1).使用索引。
select /*+ INDEX(tab pk_tab)*/ from tab;
對於這樣一條SQL,查詢使用索引pk_tab,至於如何掃描索引是Oracle自己決定的。如果能確定使用何種掃描方式最快,可以明確索引的掃描方式:
select /*+ INDEX_RS(tab pk_tab)*/ from tab;
select /*+ INDEX_SS(tab pk_tab)*/ from tab;
select /*+ INDEX_FFS(tab pk_tab)*/ from tab;
2).不使用索引。
select /*+ NO_INDEX_RS(tab pk_tab)*/ from tab;
對於這樣一條SQL,查詢不使用索引範圍掃描,那麼將使用表的全表掃描,根據情況還可以使用NO_INDEX_SS和NO_INDEX_FFS,不使用索引跳躍掃描和索引快速全掃描,這樣將使用表的全表掃描。
3).正排序使用索引。
select * from tab order by id;
對於這樣一條SQL,排序使用的正序,那麼可以使用*_asc相關的HINT,例如,select /*+ INDEX_ASC(tab pk_tab)*/ * from tab order by id;INDEX_ASC表示的是按照正向順序掃描索引。根據不同的情況還可以使用其他掃描型別的*_ASC。
4).倒排序使用索引。
select * from tab order by id desc;
對於這樣一條SQL,排序使用的倒序,那麼可以使用*_desc相關的HINT,例如,select /*+ INDEX_DESC(tab pk_tab)*/ from tab order by id desc;INDEX_DESC表示的是按照倒向順序掃描索引。根據不同的情況還可以使用其他掃描型別的*_DESC。
如果索引中包含了查詢的所有列,或者說索引的列就能滿足查詢需要,就可以使用索引快速全掃描相關的HINT。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-710456/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 【HINT】使用“NO_INDEX ”Hint提示避免SQL使用特定索引IndexSQL索引
- ORACLE使用HINT的方法Oracle
- Oracle中“HINT”的使用方法Oracle
- oracle經常使用到的hintOracle
- Oracle之Hint使用總結Oracle
- 索引反向使用案例,加index_desc hint索引Index
- 常用的Oracle HintOracle
- Oracle Hint的用法Oracle
- oracle hintOracle
- oracle hint /*+ BYPASS_UJVC*/ 使用案例Oracle
- ORACLE的HINT詳解Oracle
- (轉)Oracle Hint的用法Oracle
- Oracle中的sql hintOracleSQL
- 【索引】oracle查詢使用索引和不使用索引的比較索引Oracle
- ORACLE 部分HINTOracle
- oracle hint (續)Oracle
- Oracle Hint 精華Oracle
- zt_Oracle hint driving_site Hint的用法Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(五)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(四)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(三)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(二)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(一)Oracle
- Oracle中常見的Hint(一)Oracle
- 常見Oracle HINT的用法Oracle
- 不太常用的oracle hint整理Oracle
- Oracle索引的使用規則Oracle索引
- ORACLE 監控索引的使用Oracle索引
- oracle之hint概述Oracle
- oracle常見hintOracle
- oracle hint簡述Oracle
- oracle hint (續-0)Oracle
- oracle hint_no_indexOracleIndex
- Oracle Hint 精華文章Oracle
- Oracle Hint 詳解Oracle
- ORACLE 索引使用規Oracle索引
- 使用Oracle Hint提示來更改執行計劃Oracle