我有一個類似的幾個疑問:在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%
那些長而略畸形查詢由專用軟件來完成,所以我不能對它們進行優化。任何想法,我應該索引和改進,以獲得更好的表現?
我有一個類似的幾個疑問:在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%
那些長而略畸形查詢由專用軟件來完成,所以我不能對它們進行優化。任何想法,我應該索引和改進,以獲得更好的表現?
索引也可以用於LIKE比較,如果參數LIKE是一個常數字符串不使用通配符開始。
所以你對LIKE %X%
部件運氣不好。對於那些,沒有索引可以使用,MySQL必須對錶進行全面掃描。
只有在表達式告訴您有關開始的值時,索引纔有用。所以,當表達式不以通配符開頭時,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.
同樣對於<
,>
,<=
和>=
運營商,索引字段可以是有用的。
在您的情況,換上cat
和cat2
的索引。
你會不會與LIKE
部分是查詢的是行不通的。但是您可以確保cat
和cat2
的速度很快,方法是爲這兩列提供組合的索引。
雖然cularis的答案是正確的,但它並不能提供最好的lution。所以爲此+1。 – Karolis
你最好的選擇是對貓和CAT2一個多列索引:在你的字符串列
INDEX(cat, cat2)
指數將不利於爲cularis涉及。
如果許多連續查詢是完全一樣的(我不知道,如果是這種情況),您將大大受益MySQL Query Cache受益。
事實並非如此。 – Karolis
@Karolis情況並非如此? – Jacob
我能做些什麼來提高%X%喜歡? :( –