MySQL設計索引的原則

索引的設計可以遵循一些已有的原則,創建索引的時候請儘量考慮符合這些原則,便於提升索引的使用效率,更高效地使用索引。

  • 搜索的索引列,不一定是所要選擇的列。換句話說,最適合索引的列時出現在WHERE字句中的列,或連接子句中指定的列,而不是出現在SELECT關鍵字後的選擇列表中的列。
  • 使用唯一索引。考慮某列中值的分佈。索引的列的基數越大,索引的效果越好。例如,存放出生日期的列具有不同值,很容易區分各行。而用來記錄性別的列,只含有“M”和“F”,則對此列進行索引沒有多大用處,因爲不管搜索哪個值,都會得出大約一半的行。
  • 使用短索引。如果對字符串列進行索引,應該指定一個前綴長度,只要有可能就應該這樣做。例如,有一個CHAR(200)列,如果在前10個或20個字符內,多數值是唯一的,那麼就不要對整個列進行索引。對前10個或20個字符進行索引能夠節省大量索引空間,也可能會使查詢更快。較小的索引涉及的磁盤IO較少,較短的值比較起來更快。
  • 利用最左前綴,在創建一個n列的索引時,實際是創建了MySQL可利用的n個索引。多列索引可起幾個索引的作用,因爲可利用索引中最左邊的列集來匹配行。這樣的列集稱爲最左前綴。
  • 對於InnoDB存儲引擎的表,記錄默認會按照一定的順序保存,如果有明確定義的主鍵,則按照主鍵順序保存。如果沒有主鍵,但是有唯一索引,那麼就是按照唯一索引的順序保存。如果既沒有主鍵又沒有唯一索引,那麼表中會自動生成一個內部列,按照這個列的順序保存。按照主鍵或者內部列進行的訪問是最快的,所以InnoDB表儘量自己指定主鍵,當表中同時有幾個列都是唯一的,都可以作爲主鍵的時候,要選擇最常作爲訪問條件的列作爲主鍵,提高查詢的效率。另外,還需要注意,InnoDB表的普通索引都會保存主鍵的鍵值,所以主鍵要儘可能選擇較短的數據類型,可以有效地減少索引的磁盤佔用,提高索引的緩存效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章