1. 程式人生 > >索引 創建原則

索引 創建原則

主鍵 bsp 高速緩存 必須 多列 指定 現在 順序 緩存

  搜索的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在 WHERE
子句中的列,或連接子句中指定的列,而不是出現在 SELECT 關鍵字後的選擇列表中的列。
  使用惟一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。例
如,存放出生日期的列具有不同值,很容易區分各行。而用來記錄性別的列,只含有“ M”
“F”,則對此列進行索引沒有多大用處,因為不管搜索哪個值,都會得出大約一半的行。
   使用短索引。如果對字符串列進行索引,應該指定一個前綴長度,只要有可能就應
該這樣做。例如,如果有一個 CHAR(200)列,如果在前 10 個或 20 個字符內,多數值是惟一
的,那麽就不要對整個列進行索引。對前 10 個或 20 個字符進行索引能夠節省大量索引空間,
也可能會使查詢更快。較小的索引涉及的磁盤 IO 較少,較短的值比較起來更快。更為重要
的是,對於較短的鍵值,索引高速緩存中的塊能容納更多的鍵值,因此,MySQL 也可以在
內存中容納更多的值。這樣就增加了找到行而不用讀取索引中較多塊的可能性。
  利用最左前綴。在創建一個 n 列的索引時,實際是創建了 MySQL 可利用的 n 個索引。
多列索引可起幾個索引的作用,因為可利用索引中最左邊的列集來匹配行。這樣的列集稱為
最左前綴。
  不要過度索引。不要以為索引“越多越好”,什麽東西都用索引是錯誤的。每個額
外的索引都要占用額外的磁盤空間,並降低寫操作的性能。在修改表的內容時,索引必須進
行更新,有時可能需要重構,因此,索引越多,所花的時間越長。如果有一個索引很少利用
或從不使用,那麽會不必要地減緩表的修改速度。此外,MySQL 在生成一個執行計劃時,
要考慮各個索引,這也要花費時間。創建多余的索引給查詢優化帶來了更多的工作。索引太
多,也可能會使 MySQL 選擇不到所要使用的最好索引。只保持所需的索引有利於查詢優化。
   對於 InnoDB 存儲引擎的表,記錄默認會按照一定的順序保存,如果有明確定義的主
鍵,則按照主鍵順序保存。如果沒有主鍵,但是有唯一索引,那麽就是按照唯一索引的順序
保存。如果既沒有主鍵又沒有唯一索引,那麽表中會自動生成一個內部列,按照這個列的順
序保存。按照主鍵或者內部列進行的訪問是最快的,所以 InnoDB 表盡量自己指定主鍵,當
表中同時有幾個列都是唯一的,都可以作為主鍵的時候,要選擇最常作為訪問條件的列作為
主鍵,提高查詢的效率。另外,還需要註意,InnoDB 表的普通索引都會保存主鍵的鍵值,
所以主鍵要盡可能選擇較短的數據類型,可以有效地減少索引的磁盤占用,提高索引的緩存
效果。

索引 創建原則