使用倒序索引提升ORDER BY DESC效能
一、場景
1、表名:test_t,有一欄位名為object_id
2、總資料量:580000行,segment_size:72MB
3、Where條件(Owner=’SYS’ and Object_id>50000)的行數:32472行
4、SQL語句:select * from test_t where owner='SYS' and object_id > 50000 order by object_id desc
5、希望藉助倒序索引,提升order by object_id desc的效能
二、B*
1、採用B*樹倒序索引(DESC),COST:4,執行計劃走的INDEX RANGE SCAN
SQL語句:select * from test_t where owner='SYS' and object_id > 50000 order by object_id desc
索引方式 |
createindex idx_test_t_id_DESCon test_t(owner,object_iddesc) |
|||||||||||||||||||||
COST 與執行計劃 |
|
2、採用B*樹索引(預設為ASC),COST:94103,執行計劃走的INDEX RANGE SCAN DESENDING
索引方式 |
createindex idx_test_t_id_DESC |
|||||||||||||||||||||
COST 與執行計劃 |
|
總結:
索引方式 |
COST |
執行計劃 |
(owner,object_id desc) |
4 |
INDEX RANGE SCAN |
(owner,object_id) |
94103 |
INDEX RANGE SCAN DESENDING |
三、實際測試過程
SQL語句:select * from test_t where owner='SYS' and object_id > 50000 order by object_id desc
1、採用B*樹倒序索引(DESC)測試過程與結果
(1)test_t表上建立(OWNER+OBJECT_ID DESC)的倒序索引
SQL>create index idx_test_t_id_DESC on test_t(owner,object_id desc)
(2)重新收集統計資訊
SQL> execdbms_stats.gather_table_stats(ownname=>'SYS',tabname => 'TEST_T',estimate_percent=> 20 , cascade=> TRUE );
(3)SQL執行計劃與COST
Description |
Object owner |
Object name |
Cost |
Cardinality |
Bytes |
SELECT STATEMENT, GOAL = FIRST_ROWS |
4 |
94298 |
9806992 |
||
TABLE ACCESS BY INDEX ROWID |
SYS |
TEST_T |
4 |
94298 |
9806992 |
INDEX RANGE SCAN |
SYS |
IDX_TEST_T_ID_DESC |
3 |
1 |
2、B*樹索引(預設為ASC升序)測試過程與結果
(1)test_t表上建立(OWNER+OBJECT_ID)的普通預設ASC索引
SQL>create index idx_test_t_id_ASC on test_t(owner,object_id)
(2)重新收集統計資訊
SQL> execdbms_stats.gather_table_stats(ownname=>'SYS',tabname => 'TEST_T',estimate_percent=> 20 , cascade=> TRUE );
(3)SQL執行計劃與COST
Description |
Object owner |
Object name |
Cost |
Cardinality |
Bytes |
SELECT STATEMENT, GOAL = FIRST_ROWS |
94103 |
93792 |
9097824 |
||
TABLE ACCESS BY INDEX ROWID |
SYS |
TEST_T |
94103 |
93792 |
9097824 |
INDEX RANGE SCAN DESCENDING |
SYS |
IDX_TEST_T_ID_ASC |
287 |
93792 |
本文作者:黎俊傑(網名:踩點),從事”系統架構、作業系統、儲存裝置、資料庫、中介軟體、應用程式“六個層面系統性的效能優化工作
歡迎加入系統性能優化專業群,共同探討效能優化技術。群號:258187244