目標是使用自聯接基於序列字段(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