2011-08-03 25 views
3

我有一個類似的幾個疑問:在MySQL表中正確地編制索引的位置?

SELECT * 
FROM users 
WHERE cat = X 
AND cat2 = X 
AND title LIKE %X% 
AND content LIKE %X% 
AND email LIKE %X% 
AND box LIKE %X% 
AND address LIKE %X% 

那些長而略畸形查詢由專用軟件來完成,所以我不能對它們進行優化。任何想法,我應該索引和改進,以獲得更好的表現?

回答

2

MySQL Indexes

索引也可以用於LIKE比較,如果參數LIKE是一個常數字符串不使用通配符開始

所以你對LIKE %X%部件運氣不好。對於那些,沒有索引可以使用,MySQL必須對錶進行全面掃描。

+0

事實並非如此。 – Karolis

+0

@Karolis情況並非如此? – Jacob

+0

我能做些什麼來提高%X%喜歡? :( –

2

只有在表達式告訴您有關開始的值時,索引纔有用。所以,當表達式不以通配符開頭時,LIKE操作符纔有用。

field1 = 'value' # Index this 
field2 LIKE 'value%' # Index this 
field3 LIKE '%value%' # Do not index, beginning characters unknown. 
field4 LIKE '%value%' # Do not index, beginning characters unknown. 

同樣對於<><=>=運營商,索引字段可以是有用的。

在您的情況,換上catcat2的索引。

1

你會不會與LIKE部分是查詢的是行不通的。但是您可以確保catcat2的速度很快,方法是爲這兩列提供組合的索引。

+0

雖然cularis的答案是正確的,但它並不能提供最好的lution。所以爲此+1。 – Karolis

1

你最好的選擇是對貓和CAT2一個多列索引:在你的字符串列

INDEX(cat, cat2) 

指數將不利於爲cularis涉及。

0

如果許多連續查詢是完全一樣的(我不知道,如果是這種情況),您將大大受益MySQL Query Cache受益。