我有这个问题:
SELECT * FROM table WHERE x >= 500 AND x < 5000 ORDER BY date DESC LIMIT 0,50
我有索引:x,日期 - Btree
如果我对两个值都有索引,为什么这个查询使用索引和filesort。
x =整数 date = date
tyble type = myisam
解释
ID: 1 select_type: SIMPLE table: d type: range possible_keys: sort key: sort key_len: 2 ref: null rows: 198 extra: using index condition; using filesort
答案 0 :(得分:3)
来自参考文献 -
在某些情况下,MySQL无法使用索引来解析ORDER BY, 虽然它仍然使用索引来查找与WHERE匹配的行 条款。这些案例包括以下内容:
用于获取行的密钥与使用的密钥不同 ORDER BY:SELECT * FROM t1 WHERE key2 = constant ORDER BY key1;
尝试添加索引INDEX(date
,x)。
答案 1 :(得分:3)
查询正在使用filesort,因为它是范围查询。如果查询使用了精确的方程式,那么Filesort就会消失。
但您可能知道filesort is actualy a misname并且实际上与文件无关。