mysql創建索引的原則

1.選擇惟一性索引mysql

惟一性索引的值是惟一的,能夠更快速的經過該索引來肯定某條記錄。例如,學生表中學號是具備惟一性的字段。爲該字段創建惟一性索引能夠很快的肯定某個學生的信息。若是使用姓名的話,可能存在同名現象,從而下降查詢速度。sql

2.爲常常須要排序、分組和聯合操做的字段創建索引數據庫

常常須要ORDER BY、GROUP BY、DISTINCT和UNION等操做的字段,排序操做會浪費不少時間。若是爲其創建索引,能夠有效地避免排序操做。函數

3.爲常做爲查詢條件的字段創建索引學習

若是某個字段常常用來作查詢條件,那麼該字段的查詢速度會影響整個表的查詢速度。所以,爲這樣的字段創建索引,能夠提升整個表的查詢速度。大數據

4.限制索引的數目優化

索引的數目不是越多越好。每一個索引都須要佔用磁盤空間,索引越多,須要的磁盤空間就越大。修改表時,對索引的重構和更新很麻煩。越多的索引,會使更新表變得很浪費時間。unix

5.儘可能使用數據量少的索引排序

若是索引的值很長,那麼查詢的速度會受到影響。例如,對一個CHAR(100)類型的字段進行全文檢索須要的時間確定要比對CHAR(10)類型的字段須要的時間要多。索引

6.儘可能使用前綴來索引

若是索引字段的值很長,最好使用值的前綴來索引。例如,TEXT和BLOG類型的字段,進行全文檢索會很浪費時間。若是隻檢索字段的前面的若干個字符,這樣能夠提升檢索速度。

7.刪除再也不使用或者不多使用的索引

表中的數據被大量更新,或者數據的使用方式被改變後,原有的一些索引可能再也不須要。數據庫管理員應當按期找出這些索引,將它們刪除,從而減小索引對更新操做的影響。

8 . 最左前綴匹配原則,很是重要的原則。

mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就中止匹配,好比a 1=」」 and=」」 b=」2」 c=」「> 3 and d = 4 若是創建(a,b,c,d)順序的索引,d是用不到索引的,若是創建(a,b,d,c)的索引則均可以用到,a,b,d的順序能夠任意調整。

9 .=和in能夠亂序。

好比a = 1 and b = 2 and c = 3 創建(a,b,c)索引能夠任意順序,mysql的查詢優化器會幫你優化成索引能夠識別的形式

10 . 儘可能選擇區分度高的列做爲索引。

區分度的公式是count(distinct col)/count(*),表示字段不重複的比例,比例越大咱們掃描的記錄數越少,惟一鍵的區分度是1,而一些狀態、性別字段可能在大數據面前區分度就 是0,那可能有人會問,這個比例有什麼經驗值嗎?使用場景不一樣,這個值也很難肯定,通常須要join的字段咱們都要求是0.1以上,即平均1條掃描10條 記錄

11 .索引列不能參與計算,保持列「乾淨」。

好比from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,緣由很簡單,b+樹中存的都是數據表中的字段值,但進行檢索時,須要把全部元素都應用函數才能比較,顯然成本 太大。因此語句應該寫成create_time = unix_timestamp(’2014-05-29’);

12 .儘可能的擴展索引,不要新建索引。 
好比表中已經有a的索引,如今要加(a,b)的索引,那麼只須要修改原來的索引便可

1三、當單個索引字段查詢數據不少,區分度都不是很大時,則須要考慮創建聯合索引來提升查詢效率

注意:選擇索引的最終目的是爲了使查詢的速度變快。上面給出的原則是最基本的準則,但不能拘泥於上面的準則。讀者要在之後的學習和工做中進行不斷的實踐。根據應用的實際狀況進行分析和判斷,選擇最合適的索引方式。

相關文章
相關標籤/搜索