程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 有關Oracle Index 的三個問題(二)

有關Oracle Index 的三個問題(二)

編輯:Oracle數據庫基礎

第二講、索引也有好壞

索引有 B tree 索引, Bitmap 索引, Reverse b tree 索引, 等。最常用的是 B tree 索引。 B 的全稱是 Balanced , 其意義是,從 tree 的 root 到任何一個 leaf ,要經過同樣多的 level. 索引可以只有一個字段( Single column ) , 也可以有多個字段( Composite ) , 最多 32 個字段, 8I 還支持 Function-based index. 許多 developer 都傾向於使用單列 B 樹索引。

除此之外呢?我們還是來看一個例子吧:

在 HP ( Oracle 8.1.7 ) 上執行以下語句:

select count(1) from mytabs 
where coid>=130000 and issuedate >= to_date 
('2001-07-20', 'yyyy-mm-dd')

一開始,我們有兩個單列索引: I_mytabs1(coid), I_mytabs2(issuedate), 下面是執行情況:

COUNT(1) 
6427 
Execution Plan 
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=384 Card=1 Bytes=11) 
1 0 SORT (AGGREGATE) 
2 1 TABLE Access (BY INDEX ROWID) OF 'T_MYTABS' (Cost=384 Card =126 Bytes=1386) 
3 2 INDEX (RANGE SCAN) OF 'I_MYTABS2' (NON-UNIQUE) (Cost=11 Card=126) 
Statistics 
172 recursive calls 
1 db block gets 
5054 consistent gets 
2206 physical reads 
0 redo size 
293 bytes sent via SQL*Net to client 
359 bytes received via SQL*Net from client 
2 SQL*Net roundtrips to/from clIEnt 
5 sorts (memory) 
0 sorts (disk) 
1 rows processed

可以看到,它讀取了 7000 個數據塊來獲得所查詢的 6000 多行。

現在,去掉這兩個單列索引,增加一個復合索引 I_mytabs_test ( coid, issuedate), 重新執行,結果如下:

COUNT(1) 
6436 
Execution Plan 
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=11) 
1 0 SORT (AGGREGATE) 
2 1 INDEX (RANGE SCAN) OF 'I_MYTABS_TEST' (NON-UNIQUE) (Cost=3 Card=126 Bytes=1386) 
Statistics 
806 recursive calls 
5 db block gets 
283 consistent gets 
76 physical reads 
0 redo size 
293 bytes sent via SQL*Net to client 
359 bytes received via SQL*Net from client 
2 SQL*Net roundtrips to/from clIEnt 
3 sorts (memory) 
0 sorts (disk) 
1 rows processed

可以看到,這次只讀取了 300 個數據塊。

7000 塊對 300 塊,這就是在這個例子中,單列索引與復合索引的代價之比。這個例子提示我們, 在許多情況下,單列索引不如復合索引有效率。

可以說,在索引的設置問題上,其實有許多工作可以做。正確地設置索引,需要對應用進行總體的分析。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved