程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 索引設計准則

索引設計准則

編輯:DB2教程

1. 一個表如果建有大量索引會影響 INSERT、UPDATE 和 DELETE 語句的性能,因為在表中的數據更改時,所有索引都須進行適當的調整。另一方面,對於不需要修改數據的查詢(SELECT 語句),大量索引有助於提高性能,因為數據庫有更多的索引可供選擇,以便確定以最快速度訪問數據的最佳方法。

2. 組合索引:組合索引即多列索引,指一個索引含有多個列。一個組合索引相當於多個單列索引,如索引(ColA, ColB, ColC)至少相當於(ColA)、(ColA, ColB)、(ColA, ColB, ColC)三個索引。

2. 覆蓋的查詢可以提高性能。覆蓋的查詢是指查詢中所有指定的列都包含在同一個索引(組合索引)中。例如,如果在一個表的 a、b 和 c 列上創建了組合索引,則從該表中檢索 a 和 b 列的查詢被視為覆蓋的查詢。創建覆蓋一個查詢的索引可以提高性能,因為該查詢的所有數據都包含在索引自身當中;檢索數據時只需引用表的索引頁,不必引用數據頁,因而減少了 I/O 總量。盡管給索引添加列以覆蓋查詢可以提高性能,但在索引中額外維護更多的列會產生更新和存儲成本。

3. 對小型表進行索引可能不會產生優化效果,因為數據庫在遍歷索引以搜索數據時,花費的時間可能會比簡單的表掃描還長。

4. 應使用 SQL 事件探查器和索引優化向導幫助分析查詢,確定要創建的索引。為數據庫及其工作負荷選擇正確的索引是非常復雜的,需要在查詢速度和更新成本之間取得平衡。窄索引(搜索關鍵字中只有很少的列的索引)需要的磁盤空間和維護開銷都更少。而另一方面,寬索引可以覆蓋更多的查詢。確定正確的索引集沒有簡便的規則。經驗豐富的數據庫管理員常常能夠設計出很好的索引集,但是,即使對於不特別復雜的數據庫和工作負荷來說,這項任務也十分復雜、費時和易於出錯。可以使用索引優化向導使這項任務自動化。有關更多信息,請參見索引優化向導。

5. 可以在視圖上指定索引。

6. 可以在計算列上指定索引。

7. 避免在索引列上使用IS NULL和IS NOT NULL。避免在索引中使用任何可以為空的列,數據庫將無法使用該索引。對於單列索引,如果列包含空值,索引中將不存在此記錄;對於復合索引,如果每個列都為空,索引中同樣不存在此記錄. 如果至少有一個列不為空,則記錄存在於索引中。

8. 如果經常檢索包含大量數據的表中的少於15%的行則需要創建索引。

9. 衡量索引效率的 95/5 規則:如果查詢的結果返回的行數少於表中所有行的5%,則索引是檢索數據的最快方法,如果查詢的結果超過5%,那麼通常使用索引就不是最快的方式。

10.主關鍵字和唯一關鍵字所在的列自動具有索引,但外部關鍵字沒有自動索引。


二、索引的特征
   在確定某一索引適合某一查詢之後,可以自定義最適合具體情況的索引類型。索引特征包括:

●聚集還是非聚集
●唯一還是不唯一
●單列還是多列
●索引中的列順序為升序還是降序(索引缺省為升序,但目前多數大型數據庫已經能夠支持反向索引)
●覆蓋還是非覆蓋
●還可以自定義索引的初始存儲特征,通過設置填充因子優化其維護,並使用文件和文件組自定義其位置以優化性能。
●位映射索引(bitmap)

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