數據庫索引的創建原則


建立索引的原則:

  1. 定義主鍵的數據列一定要建立索引。
  2. 定義有外鍵的數據列一定要建立索引。
  3. 對於經常查詢的數據列最好建立索引。
  4. 對於需要在指定范圍內的快速或頻繁查詢的數據列;
  5. 經常用在WHERE子句中的數據列。
  6. 經常出現在關鍵字order by、group by、distinct后面的字段,建立索引。如果建立的是復合索引,索引的字段順序要和這些關鍵字后面的字段順序一致,否則索引不會被使用。
  7. 對於那些查詢中很少涉及的列,重復值比較多的列不要建立索引。
  8. 對於定義為text、image和bit的數據類型的列不要建立索引。
  9. 對於經常存取的列避免建立索引
  10. 限制表上的索引數目。對一個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響數據的更新操作。
  11. 對復合索引,按照字段在查詢條件中出現的頻度建立索引。在復合索引中,記錄首先按照第一個字段排序。對於在第一個字段上取值相同的記錄,系統再按照第二個字段的取值排序,以此類推。因此只有復合索引的第一個字段出現在查詢條件中,該索引才可能被使用,因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。

組合多個索引
  一個單獨的索引掃描只能用於這樣的條件子句:使用被索引字段和索引操作符類中的操作符, 並且這些條件以AND連接。假設在(a, b)上有一個索引, 那么類似WHERE a = 5 AND b = 6的條件可以使用索引,但是像WHERE a = 5 OR b = 6的條件就不能直接使用索引。
一個類似WHERE x =42 OR x = 47 OR x = 53 OR x = 99 這樣的查詢可以分解成四個在x上的獨立掃描,每個掃描使用一個條件, 最后將這些掃描的結果OR 在一起,生成最終結果。另外一個例子是,如果我們在x 和y上有獨立的索引,一個類似WHERE x = 5 AND y = 6 這樣的查詢可以分解為幾個使用獨立索引的子句,然后把這幾個結果AND 在一起,生成最終結果。

  在大多數最簡單的應用里,可能有多種索引組合都是有用的,數據庫開發人員必須在使用哪個索引之間作出平衡。有時候多字段索引是最好的,有時候創建一個獨立索引並依靠索引組合是最好的。比如,假如你的查詢有時候只涉及字段x,有時候只涉及字段y,有時候兩個字段都涉及, 那么你可能會選擇在x和y上創建兩個獨立的索引, 然后依靠索引組合來處理同時使用兩個字段的查詢。你也可以在(x, y)上創建一個多字段索引, 它在同時使用兩個字段的查詢通常比索引組合更高效,但是對那些只包含y的查詢幾乎沒有用,因此它不能是唯一一個索引。一個多字段索引和y上的獨立索引可能會更好。因為對那些只涉及x的查詢, 可以使用多字段索引,但是它會更大,因此也比只在x上的索引更慢。最后一個選擇是創建三個索引, 但是這種方法只有在表的更新遠比查詢少,並且所有三種查詢都很普遍的情況下才是合理的。如果其中一種查詢比其它的很多,那么你可能更願意僅僅創建兩種匹配更常見查詢的索引。

備注:設定某個列為主鍵時,是否默認為其創建索引?

答:一般創建主鍵時,大多數數據庫會自動創建一個唯一索引,一般來說外鍵肯定是會被經常做連接查詢的字段,所以數據庫管理系統會自動加上索引。mysql / oralce / sql server 等都會自動添加。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM