轉自:Oracle索引HINT的使用web
存儲在數據庫中數據的分佈狀況開發人員或管理員比Oracle優化器更加的清楚,在優化器不能做出最有查詢路徑選擇的狀況下,使用HINT(提示)人爲的固定查詢路徑,必定程度能生成更優的執行計劃。索引 | 索引範圍掃描 | 索引跳躍掃描 | 索引快速全掃描 |
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。數據庫