使用索引消除排序
索引是有順序的,如果一個查詢使用索引,可以利用索引的順序讀取資料,這樣可以消除OrderBy的排序。
前提:索引列的順序和OrderBy的順序完全一致
實驗使用Hr模式的Employees表,查詢某個工種(job_id)的所有員工,並且按照入職時間降序排列。檢視索引對排序的影響。
1.檢視job_id為IT_PROG和ST_MAN的員工,按照工種(Job_id),入職時間(Hire_date)降序排列
可以看到根據索引的順序讀取資料,消除了OrderBy排序
單獨給Job_id列建立索引,則結果如下(SORT ORDER BY不能避免)
2.查詢工種(Job_id)為IT_PROG的員工,並且按照入職時間降序排列。
可以看到,單一的Job_id作為過濾條件,也可以使用排序消除的特性
3.查詢工種(Job_id)為IT_PROG的員工,並且按照入職時間升序排列。
使用單一的Job_id作為過濾條件,甚至升序排列,也能夠做到排序消除(INDEX RANGE SCAN DESCENDING)
4.檢視job_id為IT_PROG和ST_MAN的員工,按照工種(Job_id),入職時間(Hire_date)升序排列
可以看到,這種情況下,索引不能消除排序。
總結
建立A、B列的組合索引,create index ind_test on test(a,b desc)
order by a,b desc 可以消除排序
但是order by a,b 則不能消除排序。
如果a作為單獨的過濾條件,則order by b 或者 order by b desc 都是可以消除排序的。
前提:索引列的順序和OrderBy的順序完全一致
實驗使用Hr模式的Employees表,查詢某個工種(job_id)的所有員工,並且按照入職時間降序排列。檢視索引對排序的影響。
-
create table test as select * from hr.employees;
-
create index ind_test on test(job_id,hire_date desc);
- exec dbms_stats.gather_schema_stats('EDMOND');
-
select * from test
-
where job_id='IT_PROG' or job_id='ST_MAN'
- order by job_id,hire_date desc;
單獨給Job_id列建立索引,則結果如下(SORT ORDER BY不能避免)
2.查詢工種(Job_id)為IT_PROG的員工,並且按照入職時間降序排列。
可以看到,單一的Job_id作為過濾條件,也可以使用排序消除的特性
-
select * from test
-
where job_id='IT_PROG'
- order by hire_date desc;
3.查詢工種(Job_id)為IT_PROG的員工,並且按照入職時間升序排列。
使用單一的Job_id作為過濾條件,甚至升序排列,也能夠做到排序消除(INDEX RANGE SCAN DESCENDING)
4.檢視job_id為IT_PROG和ST_MAN的員工,按照工種(Job_id),入職時間(Hire_date)升序排列
-
select * from test
-
where job_id='IT_PROG' or job_id='ST_MAN'
- order by job_id,hire_date;
可以看到,這種情況下,索引不能消除排序。
總結
建立A、B列的組合索引,create index ind_test on test(a,b desc)
order by a,b desc 可以消除排序
但是order by a,b 則不能消除排序。
如果a作為單獨的過濾條件,則order by b 或者 order by b desc 都是可以消除排序的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1067134/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 索引無法消除排序的問題索引排序
- 【索引】反向索引引起排序索引排序
- 使用索引掃描來進行排序索引排序
- PostgreSQL11preview-索引優化。filter智慧消除、分割槽索引智慧合併SQLView索引優化Filter
- 演算法與排序--索引演算法排序索引
- 【SQL 學習】排序問題之order by與索引排序SQL排序索引
- SQL優化之利用索引排序SQL優化索引排序
- cassandra的索引查詢和排序索引排序
- PHP 實現堆, 堆排序以及索引堆PHP排序索引
- MySQL利用索引優化ORDER BY排序語句MySql索引優化排序
- MYSQL order by排序與索引關係總結MySql排序索引
- 索引裡的NULL值與排序小記索引Null排序
- sql調優一例---索引排序hintSQL索引排序
- 【索引】oracle查詢使用索引和不使用索引的比較索引Oracle
- 消除htmlHTML
- 【索引】使用索引分析快速得到索引的基本資訊索引
- cassandra高階操作之索引、排序以及分頁索引排序
- 索引塊內容dump說明已經排序索引排序
- mongodb索引使用MongoDB索引
- Mysql索引使用MySql索引
- oracle 索引使用及索引失效總結Oracle索引
- 索引及排序對執行計劃的影響索引排序
- MySql索引使用策略MySql索引
- Mysql——index(索引)使用MySqlIndex索引
- ORACLE 索引使用規Oracle索引
- 索引器使用示例索引
- Mysql索引以及使用索引注意事項MySql索引
- java之陣列的索引,排序以及二維陣列Java陣列索引排序
- 高斯消除矩陣矩陣
- 矩陣消除遊戲矩陣遊戲
- [zt] 聚集索引和非聚集索引(sql server索引結構及其使用)索引SQLServer
- 圖解MySQL索引(三)—如何正確使用索引?圖解MySql索引
- 使用Elasticsearch的動態索引和索引優化Elasticsearch索引優化
- 使用聚集索引和非聚集索引的區別索引
- 使用Index提示 強制使用索引Index索引
- MySql如何使用索引(二)MySql索引
- MySql如何使用索引(一)MySql索引
- localforage indexedDB如何使用索引Index索引