目标是使用自联接基于序列字段(sequentialsortfield)以一定的顺序中减去一个字段(someValue中)的值。查询按原样提供了正确的结果,但大数据集非常缓慢。使用mysql'explain'显示这个查询不是使用索引,而是使用filesort,尽管所有三个示例字段都被编入索引。如果我删除'order by',它不再使用filesort [但是]不会根据所需的顺序产生正确的结果。
我已经搜索和没有看到SO或MySQL文档已经帮助。在table1上似乎无法避免using filesort
,除非我放弃order by
但我确实需要它。指数存在于所有三个领域。
已经通过示例来说明我的问题。
结构 “表”:
id INT
somevalue INT
sequentialsortfield INT
查询:
select table1.somevalue-table2.somevalue as PrevRowDiff
FROM table AS table1,
table AS table2
WHERE table1.sequentialsortfield+1 = table2.sequentialsortfield
order by id;
我不确定你想要做什么..你能更好地解释自己吗? – jcho360
使用自连接以某种顺序减去字段的值。查询结果正确,但大数据集非常缓慢。使用mysql'explain'显示这个查询不是使用索引,而是使用filesort。如果我删除'order by',它会进行优化,但不会根据所需的顺序产生正确的结果。 – TransitDataHead
有没有附加条件?或者你要转储整个大型数据集? – newtover