MySQL设计索引的原则
?1. 搜索的索引列,不一定是所要選擇的列。
換句話說,最適合索引的列是出現在 WHERE 子句中的列,或連接子句中指定的列,而不是出現在 SELECT 關鍵字后的選擇列表中的列 。
2. 使用惟一索引。
考慮某列中值的分布。對于惟一值的列,索引的效果最好,而具有多個重復值的列,其索引效果最差。例如,存放年齡的列具有不同值,很容易區分各行。而用來記錄性別的列,只含有 “ M ” 和 “ F ” ,則對此列進行索引沒有多大用處(不管搜索哪個值,都會得出大約一半的行)
3. 使用短索引。
如果對串列進行索引,應該指定一個前綴長度,只要有可能就應該這樣做 。
例如,如果有一個 CHAR(200) 列,如果在前 10 個或 20 個字符內,多數值是惟一的,那么就不要對整個列進行索引。對前 10 個或 20 個字符進行索引能夠節省大量索引空間,也可能會使查詢更快。較小的索引涉及的磁盤 I/O 較少,較短的值比較起來更快 。
更為重要的是,對于較短的鍵值,索引高速緩存中的塊能容納更多的鍵值,因此, MySQL也可以在內存中容納更多的值。這增加 了找到行而不用讀取索引中較多塊的可能性。
(當然,應該利用一些常識。如僅用列值的第一個字符進行索引是不可能有多大好處的 ,因為這個索引中不會有許多不 同的值。)
4. 利用最左前綴。
在創建 一個 n 列的索引時,實際是創建了 MySQL 可利用的 n 個索引。多列索引可起幾個索引的作用,因為可利用索引中最左邊的列集來匹配行。這樣的列 集
稱為最左前綴。(這與索引一個列的前綴不同,索引一個列的前綴是利用該的前 n 個 字符作為索引值。)
5. 不要過度索引。
不要以為 索引 “ 越多越好 ” ,什么東西都用索引是錯的。每個額外的 索引都要占用額外的磁盤空間,并降低寫操作的性能,這一點我們前面已經介紹 過。在修改表的內容時,索引必須進行更新,有時可能需要重構,因此,索引越多,所花的 時間越長。如果有一個索引很少利用或從不使用,那么會不必要地減緩表 的修改速度。此外, MySQL 在生成一個執行計劃時,要考慮各個索引,這也要費時間。創建多余的 索引給查詢優化帶來了更多的工作。索引太多,也可能會使 MySQL 選擇不到所要使用的最好索引。只保持所需的索引有利于查詢優化。如果想給已索引的表增加索引,應該考慮所要增加的索引是否是現有多列索引的最左 索引。如果是,則就不要費力去增加這個索引了,因為已經有了。
6. 考慮在列上進行 的比較類型。索引可用于 “ < ” 、 “ < = ” 、 “ = ” 、 “ > = ” 、 “ >” 和 BETWEEN 運算。
在模式具有一個直接量前綴時,索引也用于 LIKE 運算。如果只將某個列用于其他類型的運算時(如 STRCMP( ) ),對其進行索引沒有價值。 ??
?
總結
以上是生活随笔為你收集整理的MySQL设计索引的原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双色奶冻怎么做?
- 下一篇: SQL中的left join