使用倒序索引提公升ORDER BY DESC效能

2021-06-15 04:59:55 字數 3514 閱讀 8599

使用倒序索引(index desc),可以大幅提公升帶有order by desc子句的sql語句效能。

一、場景

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*樹倒序索引(desc)比b*樹索引(預設為asc公升序)帶來的效能提公升對比

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

索引方式

create

index

idx_test_t_id_desc

ontest_t(owner,object_id

desc)

cost

與執行計畫

description

object owner

object name

cost

cardinality

bytes

select statement, goal = first_rows 4

94298

9806992

table access by index rowid

systest_t 4

94298

9806992

index range scan

sys

idx_test_t_id_desc 3

1 2、採用b*樹索引(預設為asc),

cost:94103,執行計畫走的index range scan desending

索引方式

create

index

idx_test_t_id_desc

ontest_t(owner,object_id)

cost

與執行計畫

description

object owner

object name

cost

cardinality

bytes

select statement, goal = first_rows

94103

93792

9097824

table access by index rowid

systest_t

94103

93792

9097824

index

range

scan descending

sys

idx_test_t_id_asc

28793792

總結:

索引方式

cost

執行計畫

(owner,object_id desc)

4index 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> exec

dbms_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

systest_t 4

94298

9806992

index range scan

sys

idx_test_t_id_desc 3

12、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> exec

dbms_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

systest_t

94103

93792

9097824

index

range

scan descending

sys

idx_test_t_id_asc

28793792 」

系統架構、作業系統、儲存裝置、資料庫、中介軟體、應用程式

「六個層面系統性的效能優化工作

歡迎加入

系統效能優化專業群,共同**效能優化技術。群號:

258187244

對Python中list的倒序索引和切片例項講解

python中list的倒序索引和切片是非常常見和方便的操作,但由於是倒序,有時候也不太好理解或者容易搞混。nums 0,1,2,3,4,5,6,7,8,9 print nums 1 9 print nums 2 8,9 print nums 3 0,1,2,3,nraibkk 4,5,6 例如,給...

vue 倒序 實現 如何使用Vue實現評論框架

對相應模組實現元件化 能顯示發布者 發布時間以及內容 乍一看不是很難,但是在具體的實現上還是遇到了一些問題。此外,因為第一次使用 vue 看文件看的也是一臉懵逼,話不多說,下面來分析一下,具體每個模組是怎麼實現的。原始碼位址 引入元件 commentinput commentlist paginat...

結構性偽類選擇器與倒序版的

結構性偽類選擇器 style 1 a標籤中第乙個兒子b採用此樣式 a b first child 2 a標籤中最後乙個兒子b採用此樣式 a b flast child 3 a標籤中唯一的乙個兒子b採用此樣式 a b only child 4 a標籤中第三個兒子b採用此樣式 a b nth child...