索引的設(shè)計可以遵循一定的原則抬驴,符合這些原則的索引秒啦,能夠提高索引的使用效率。
1.搜索的索引列
要建索引的列不一定是所要結(jié)果的列鸥鹉,簡單的說就是where條件中出現(xiàn)的列需要索引蛮穿,或者鏈接子句用到的列需要索引,而只在select中出現(xiàn)的列不需要索引毁渗。
2.使用唯一索引
考慮某列中值的分布践磅,索引列的基數(shù)越大越好,例如存放出生日期的列具有不同的值灸异,很容易區(qū)分各行;而存放性別的列府适,只有兩個值,所以對這種列加索引也沒有什么價值肺樟,不管搜哪個值檐春,都是大約一半的數(shù)據(jù)量。
3.使用短索引
如果對字符串列進行索引么伯,應(yīng)該指定一個前綴長度疟暖,只要有可能就應(yīng)該這樣做。例如,有一個char(200)的列俐巴,如果前10~20個字符內(nèi)朋贬,多數(shù)值是唯一的,那么就不要對整個列進行索引(時刻考慮對資源的占用問題)窜骄。
4.利用最左前綴
在創(chuàng)建一個n列的索引時,實際是創(chuàng)建了mysql可利用的n個索引摆屯。多列索引可以起幾個索引的作用邻遏,因為可以利用索引中最左邊的列集來匹配行。這樣的列集稱為最左前綴虐骑。
5.不要過度索引
什么列都建索引是錯誤的准验,比如從來都不查詢的列,建上索引后一次也不用沒什么價值廷没,反而占用了額外的資源糊饱。
??對于小表,不需要索引颠黎,中到大表另锋,用索引最好,特大表用分區(qū)狭归。
同時夭坪,對于InnoDB存儲引擎的表,記錄默認按照一定的順序保存过椎,這個順序是室梅,如果有明確的主鍵,則按主鍵順序存儲疚宇,如果無主鍵有唯一索引亡鼠,則按唯一索引順序存儲,如果也無唯一索引敷待,則會自動生成一個內(nèi)部列间涵,按照這個列的順序存儲。主鍵要符合mysql數(shù)據(jù)類型的原則讼撒,即盡可能選擇較短的數(shù)據(jù)類型浑厚。