1. 程式人生 > 其它 >關於索引的注意事項(何時建立,索引無效,索引數量)

關於索引的注意事項(何時建立,索引無效,索引數量)

  儘管索引有提速的功能(可以提高相應的select的效率),但是也不能濫用,因為它會降低資料表的寫操作速度(insert和update的效率會變低),也會佔用一定的磁碟空間。所以在建立和使用索引的過程中,有一些事項需要注意:

一、何時建立索引。

  • WHERE關鍵詞後面的欄位建立索引,可以加快條件判斷速度。
  • ORDER BY關鍵詞後面的欄位建立索引,可以加快排序速度。
  • 表連線關鍵詞ON後面的欄位建立索引,可以加快表連線速度。
  • 包含大量NULL的欄位不適合建立索引,因為索引不可以包含NULL值。
  • 包含大量重複值的欄位不適合建立索引,因為基於索引的查詢規則。在進行條件篩選的時候可能會產生大量的資料行,此時索引並不能加快資料庫搜尋過程中的掃描速度。

二、索引無效的情況。

  • WHERE關鍵詞後面的條件表示式中如果使用 IN 、 OR 、 != 或者 <> ,均會導致索引無效。解決方法是將 "!=" 或者 "<>" 替換為 ">AND<" ,將 "IS NOT NULL" 替換為 ">=CHR(0)"。 
  • 篩選或排序過程中,如果對索引列使用函式,則索引失效。
  • 篩選過程中,如果字元型欄位寫成了數值型的數字,則索引失效(比如,使用者id是字元型,那篩選的時候要寫 WHERE uid = "1" )。
  • 使用模糊查詢的時候,如果將萬用字元放在開頭,則索引失效(like "%aaa%" 不會使用索引而 like "aaa%" 可以使用索引)
  • 對於多列的組合索引,遵循左原則,例如對欄位A,B,C設定索引 INDEX(A,B,C),則 "A > 0 AND B > 10" , "A > 0 AND B > 10 AND C > 100" , 都可以使組合索引有效,但是 "B > 10" ,"B > 10 AND C > 100" 都會導致組合索引失效。
  • 在 JOIN 操作中,關鍵詞 ON 後面的欄位型別要保持(也就是左邊中這個欄位的資料型別和右表中同一欄位的資料型別要保持一致),否則索引無效。

三、索引數量並不是越多越好。

  • 原則上,一個表的索引數量最好不要超過6個(當然也得看你的資料的原始欄位數量)。