2012-07-29 230 views
1

確定mysql索引的key_len是否「太長」的一般參數是什麼?在mysql索引上優化key_len

例如,對於較長的VARCHAR列,具有一個鍵將會更長。在一個案例中,我有一個索引key_len=767。在這種情況下,我應該這樣做:

ADD INDEX (title(50)); 

回答

2

如果表擁有許多行和/或如果執行大量的SELECT ... ORDER BY查詢,所涉及的領域(S),具有指數(ES)將加快SELECT查詢。
但是,它會減慢插入,寫入和更新這些字段,因爲索引也需要更新。
表中的每個索引都使用磁盤空間:如果磁盤空間非常短,請使用較小的key_len。但是你的查詢會執行得更慢。

想象一下只有一列的表格,只有前三個字符被索引。該表包含:
蒂莫
Timothée

蒂莫西
Timmo

SELECT * FROM `my_table` ORDER BY `name` ASC 

這個查詢將使用索引,但由於它的內容被部分編入索引,它需要額外的處理做一個完整的排序,執行將花費更長的時間。

MySQL索引最長可達1000個字節(InnoDB表格爲767個字節)。 (link

The Innodb documentation says
在InnoDB中,具有長PRIMARY KEY(無論是一個漫長的值,或者是形成長複合值若干列的單個列)浪費了大量的磁盤空間。一行中的主鍵值在所有指向同一行的二級索引記錄中都是重複的。 (請參見第14.3.11節「InnoDB表和索引結構」。)如果主鍵很長,或者索引長VARCHAR列的前綴而不是整列,則創建一個AUTO_INCREMENT列作爲主鍵。