設計索引的原則


1.最適合索引的列是出現在 WHERE子句中的列,或連接子句中指定的列,而不是出現在 SELECT 關鍵字后的選擇列表中的列。
使用惟一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。

例如,存放出生日期的列具有不同值,很容易區分各行。而用來記錄性別的列,只含有“ M”
和“F”,則對此列進行索引沒有多大用處,因為不管搜索哪個值,都會得出大約一半的行。

2.如果對字符串列進行索引,應該指定一個前綴長度,只要有可能就應該這樣做。

例如,如果有一個 CHAR(200)列,如果在前 10 個或 20 個字符內,多數值是惟一的,那么就不要對整個列進行索引。對前 10 個或 20 個字符進行索引能夠節省大量索引空間,也可能會使查詢更快。較小的索引涉及的磁盤 IO 較少,較短的值比較起來更快。更為重要的是,對於較短的鍵值,索引高速緩存中的塊能容納更多的鍵值,因此,MySQL 也可以在內存中容納更多的值。這樣就增加了找到行而不用讀取索引中較多塊的可能性。

 3.利用最左前綴。

在創建一個 n 列的索引時,實際是創建了 MySQL 可利用的 n 個索引。多列索引可起幾個索引的作用,因為可利用索引中最左邊的列集來匹配行。這樣的列集稱為最左前綴。

4.不要過度索引。

不要以為索引“越多越好”,什么東西都用索引是錯誤的。每個額外的索引都要占用額外的磁盤空間,並降低寫操作的性能。在修改表的內容時,索引必須進行更新,有時可能需要重構,因此,索引越多,所花的時間越長。如果有一個索引很少利用或從不使用,那么會不必要地減緩表的修改速度。此外,MySQL 在生成一個執行計划時,要考慮各個索引,這也要花費時間。創建多余的索引給查詢優化帶來了更多的工作。索引太多,也可能會使 MySQL 選擇不到所要使用的最好索引。只保持所需的索引有利於查詢優化。

5.對於 InnoDB 存儲引擎的表,記錄默認會按照一定的順序保存,

如果有明確定義的主鍵,則按照主鍵順序保存。

如果沒有主鍵,但是有唯一索引,那么就是按照唯一索引的順序保存。
如果既沒有主鍵又沒有唯一索引,那么表中會自動生成一個內部列,按照這個列的順序保存。
按照主鍵或者內部列進行的訪問是最快的,所以 InnoDB 表盡量自己指定主鍵,當表中同時有幾個列都是唯一的,都可以作為主鍵的時候,
要選擇最常作為訪問條件的列作為主鍵,提高查詢的效率。

另外,還需要注意,InnoDB 表的普通索引都會保存主鍵的鍵值,所以主鍵要盡可能選擇較短的數據類型,可以有效地減少索引的磁盤占用,提高索引的緩存效果。


免責聲明!

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



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