我想优化这个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