[编辑]
目标是使用自连接基于顺序字段(sequentialsortfield)以特定顺序减去字段(somevalue)的值。查询原样给出正确的结果,但是对于大型数据集非常慢。使用 mysql 'explain' 表明该查询不使用索引,而是使用文件排序,尽管所有三个示例字段都已编入索引。如果我删除“order by”,它不再使用 filesort [但] 不会根据所需的顺序产生正确的结果。
我在 SO 或 MySQL 文档上搜索并没有看到任何有用的信息。除非我放弃它,否则似乎无法避免using filesort
在 table1 上,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;