MySQL索引設計的原則

來源:互聯網
上載者:User

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索引之隔離列 

MySQL索引之雜湊索引

MySQL索引之首碼索引和索引選擇性

MySQL索引使用率監控

MySQL索引最佳化和in or替換為union all

 本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.