【问题标题】:mysql using filesort instead of indexmysql使用文件排序而不是索引
【发布时间】:2012-01-19 23:24:18
【问题描述】:

我有这个问题:

SELECT * FROM table WHERE x >= 500 AND x < 5000 ORDER BY date DESC LIMIT 0,50

我有索引:x,日期 - Btree

如果我对这两个值都有索引,为什么这个查询使用索引和文件排序。

x= 整数 日期 = 日期

类型类型 = myisam

解释:

编号:1 选择类型:简单 表:d 类型:范围 可能的键:排序 关键:排序 关键长度:2 参考:空 行数:198 额外:使用索引条件;使用文件排序

【问题讨论】:

  • 请发布EXPLAIN ... 输出。

标签: mysql indexing


【解决方案1】:

查询正在使用文件排序,因为它是一个范围查询。如果查询使用精确方程,文件排序将消失。

但您可能知道filesort is actualy a misname 并且实际上与文件无关。

【讨论】:

  • 您包含的链接不建议这样做。
  • @arjreal,不建议什么?
  • First of all, this is Using temporary. Secondly, temporary tables may go to disk if they are too big, but EXPLAIN doesn’t show that. (If I interview you, I might ask you what “too big” means, or I might ask you the other reason temporary tables go to disk!)
【解决方案2】:

来自参考 -

在某些情况下,MySQL 无法使用索引来解析 ORDER BY, 尽管它仍然使用索引来查找与 WHERE 匹配的行 条款。这些案例包括:

用于获取行的键与在 ORDER BY: SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

尝试添加索引 INDEX (date, x)。

【讨论】:

  • 不,没有帮助。但是谢谢你向我解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多