2012-07-06 62 views
2

我很好奇這是如何處理的。我有一個名爲titlevarchar(255)列,它有索引的前10個字符。在VARCHAR中引用索引前綴時,MySQL如何使用ORDER BY?

如果我創建一個按標題排序的MySQL查詢,它是單獨利用該索引,還是忽略它,還是必須發出命令來使用該索引?

例如假設我有兩個title項目命名爲:

This is the same thing 
This is the same thing only slightly different 

前10個字符是相同的,那麼,如何MySQL的處理這個問題?它是否使用前綴索引到前10個字符,然後逐行索引?

+1

MySQL可能會或可能不會使用索引。聲明的解釋將顯示索引是否被使用。使用'ORDER BY title',使用索引是不夠的,除非MySQL有一些神奇的方式來知道沒有標題超過10個字符長度......我認爲它不是,如果它確實如此,它可能因存儲引擎而異(MyISAM與InnoDB)。 MySQL有可能利用索引來優化排序,但它不能完全避免排序,至少不能使用該索引。 – spencer7593 2012-07-06 23:42:37

回答

1

嗯,這是said說:

該指數還可以用來即使ORDER BY不將 指數完全一致,只要所有的指標中未使用的部分和 所有額外的ORDER BY列是WHERE子句中的常量。

但我強烈建議使用EXPLAIN檢查此查詢,以查看優化程序將選擇哪個路徑。