索引是提高資料查詢的最有效方法


索引的管理成本:
1.存儲索引的磁碟空間
2.執行資料修改操作(insertupdatedelete)產生的索引維護
3.在資料處理時會需額外的回退空間。
建索引之後,資料修改時間會延長。
索引按存儲方法分類
B*樹索引
B*樹索引是最常用的索引,其存儲結構類似書的索引結構,有分支和葉兩種類型的存儲資料塊,分支相當於書的大目錄,葉塊相當於索引到的具體的書頁。一般索引及唯一約束索引都使用B*樹索引。

點陣圖索引
點陣圖索引儲存主要用來節省空間,減少oracle對資料塊的訪問,它採用點陣圖偏移方式來與表的行ID號對應,採用點陣圖索引一般是重複值太多的表字段。點陣圖索引在實際密集型OLTP(資料事務處理)中用得比較少,因為OLTP會對表進行大量的刪除、修改、新建操作,oracle每次進行操作都回對要操作的資料塊加鎖,所以多人操作容易產生資料塊鎖等待甚至鎖死現象。在OLAP(資料分析處理)中應用點陣圖有優勢,因為OLAP中大部分是對資料庫德查詢操作,而且一般採用資料倉庫技術,所以大量資料採用點陣圖索引節省空間比較明顯。

索引按功能分類
唯一索引
唯一索引有兩個作用,一個是資料約束,一個是資料索引,其中資料約束主要用來保證資料的完整性,唯一索引產生的索引記錄中每一條記錄都對應一個唯一的rowid

主關鍵字索引
主關鍵字索引產生的索引同唯一索引,只不過它是在資料庫建立主關鍵字時系統自動建立的

一般索引
一般索引不產生資料約束作用,其功能主要是對欄位建立索引表,

以提高資料查詢速度。

索引按索引物件分類
單列索引(表的單個欄位的索引)
多列索引(表多個欄位的索引)
函數索引(對欄位進行函數運算的索引)
建立函數索引的方法:
create index test on table_name(trunc(表列))

應用索引的掃描分類:
INDEX UNIQUE SCAN(按索引的唯一值掃描)
INDEX RANGE SCAN(按索引值範圍掃描)
INDEX FAST FULL SCAN(按索引值快速全部掃描)

什麼情況下應該建立索引
表的主關鍵字
自動建立唯一索引
表的欄位唯一約束
oracle利用索引來保證資料的完整性
直接條件查詢的欄位
sql中用於條件約束的欄位
查詢中與其他表關聯的欄位
欄位常常建立了外鍵關係
查詢中排序的欄位
排序的欄位如果通過索引去訪問那將大大提高排序速度
查詢中統計或分組統計的欄位

什麼情況下應不建或少建索引
表記錄太少
如果一個表記錄太少,採用索引去訪問記錄的話,那首先需訪問索引表,再通過索引表訪問資料表,一般索引表與資料表不在同一個資料塊,這種情況下oracle至少要往返讀取資料塊兩次。而不用索引的情況下

oracle會將所有的資料一次讀出,處理速度顯然會比用索引快。

經常插入、刪除、修改的表
對一些經常處理的業務表應在查詢允許的情況下儘量減少索引。

資料重複且分佈平均的表字段
加入一個表有10萬行記錄,有一個欄位A只有TF兩種值,且每個值的分佈概率大約為50%,那麼對這種表A欄位建索引一般不會提高資料庫的查詢速度。

經常和主欄位一塊查詢但主欄位索引值比較多的表字段

如果一個表的記錄達到100萬以上的話,要對其中一個欄位建索引可能要花很長的時間,甚至導致伺服器資料庫死機,因為在建索引的時候oracle要將索引欄位所有的內容取出並進行全面排序,資料量大的話可能導致伺服器排序記憶體不足而引用磁片交換空間進行,這將嚴重影響伺服器資料庫德工作。

 

arrow
arrow
    全站熱搜

    oracleD2K 發表在 痞客邦 留言(0) 人氣()