[編集]
目標は、自己結合を使用して、シーケンシャル フィールド (sequentialsortfield) に基づいて特定の順序でフィールド (somevalue) の値を減算することです。そのままのクエリで正しい結果が得られますが、大規模なデータセットでは非常に遅くなります。mysql 'explain' を使用すると、このクエリがインデックスではなくファイルソートを使用していることがわかりますが、3 つの例のフィールドはすべてインデックス化されています。「order by」を削除すると、ファイルソートは使用されなくなりますが、目的の順序に関して正しい結果が得られません。
SOまたはMySQLのドキュメントを検索して、役に立ったものは何も見ませんでした。using filesort
ドロップしない限り、テーブル1で回避できないようですがorder by
、必要です。インデックスは 3 つのフィールドすべてに存在します。
私の質問を説明するために例を生成しました。
「テーブル」の構造:
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;