我想優化這個MySQL查詢使用EXPLAIN。有人可以幫我出來嗎?什麼偏好查詢優化:使用filesort或更多的行檢查
EXPLAIN SELECT * FROM keyword
WHERE keyword LIKE "panasonic%"
AND keyword != "panasonic"
AND price < 3230 AND price > 3370
ORDER BY price DESC
LIMIT 99
基本上我想找出它與「某些關鍵字」開始,但不完全匹配它,其價格爲在一些特定的範圍不的關鍵字。哦,我必須按價格降序排列(這是導致問題的原因)。
explain輸出:
id: 1
select_type: SIMPLE
table: keyword
type: range
possible_keys: PRIMARY, keyword_price, price_keyword
key: keyword_price
key_len: 765
ref: NULL
rows: 24
Extra: Using where; Using filesort
指標 KEY_NAME的欄
PRIMARY: keyword
keyword_price: keyword, price
price_keyword: price, keyword
現在,如果我放棄使用索引提示,並更改查詢
EXPLAIN SELECT * FROM keyword USE INDEX (price_keyword)
WHERE keyword LIKE "panasonic%"
AND keyword != "panasonic"
AND price < 3230 AND price > 3370
ORDER BY price DESC
LIMIT 99
explain輸出更改爲
id: 1
select_type: SIMPLE
table: keyword
type: index
possible_keys: price_keyword
key: price_keyword
key_len: 790
ref: NULL
rows: 1043044 (WHAT THE ????)
Extra: Using where
解釋輸出顯示行數成倍增加,但「使用filesort」已消失。
在這種情況下哪種查詢更好?那個「行檢查」欄可以欺騙嗎?
問候
「和價格<3230和價格> 3370」。應該不是「AND(價格<3230或價格> 3370)」 – Jaydee 2010-09-17 08:36:24
@Jaydee - 對。其實我用的不是和。 – vikmalhotra 2010-09-17 09:42:50
做了改變,影響查詢優化? – Jaydee 2010-09-17 09:55:33