前言
索引加快了檢索的速度,但是卻降低了數據列里插入、刪除以及修改數值的速度。也就是說,索引降低了許多涉及寫入的操作速度。之所以出現這種情況,是由于寫入一條數據不僅僅是要寫入到數據行,還需要所有的索引都作出相應的改變如更新或是重新編排。mysql在為檢索生成一個執行方案時候,要仔細對索引進行計算,創建過多的索引對查詢優化程序就加上了更多的工作,而且當你有太多的索引的時候,mysql還有可能無法選出最好的索引來使用。于是在選擇索引的時候,需要采取一些策略。
策略1
在選擇索引列的時候,盡量為用搜索、分類或者分組的數據列編制索引,不要為作為輸出的數據列編制索引。換句話說,最合適有索引的數據列是那些在where字句中出現的數據列,在連接字句中給出的數據列、或是在order by或是group by子句中出現的數據列。
策略2
綜合考慮數據列的維度勢。數據列的維度,等于它所容納的非重復值的個數。
策略3
盡量選擇短小的值進行索引
短小的值可以讓比較操作更快完成,加快索引查詢速度。
短小的值可以讓索引的體積更小,減少磁盤I/O活動
短小的鍵值意味著鍵緩存里的索引塊可以容納更多的鍵值,讓MySQL可以在內存中容納更多的鍵,這樣較少了I/O活動的概率。
InnoDB存儲引擎采用的聚族索引。所謂的聚族索引就是把數據行和主鍵索引集中保存在一起,其他的索引都是二級索引,它們保存著主鍵值和二級索引值。對于二級索引查找過程是先通過二級索引找到主鍵,然后通過主鍵找到對應的數據。選擇短小的值進行索引,可以減少二級索引占據的空間。
策略4
為字符串值的前綴添加索引
如果打算給一個字符串列添加索引,盡可能的給出前綴長度。
策略5
不要建立過多的索引