私はディレクトリ構造のようにsmthを定義するテーブルFOLDERSを持っています。これには、ID、PARENT_ID、およびLINK_IDという列が含まれています。OR条件付きのMySQL結合テーブル
遅いクエリで問題が発生しているアプリケーションを変更することはできません。
このアプリケーションには、PARENT_IDがID またはLINK_IDの両方を参照できるロジックがあります。
また、私は私が見つけたこと、クエリを変更することはできません全体私たちのETLプロセスを遅くする:
SELECT folders.ID AS OrigFolderID, parentfolder.ID, parentfolder.Name
FROM folders
LEFT JOIN folders AS parentfolder ON folders.ParentID=parentfolder.ID OR folders.ParentID=parentfolder.LinkID
WHERE folders.ID IN (112450385,188823933,211307470,211403833,211545367,212449523,212539966)
私たちは、削除またはインデックスの追加、しかし、データベースを変更することができます。
このクエリを高速化する可能性はありますか?
"parentfolder"のインデックスが動作していないようです(LinkID、ParentId、およびプライマリキーのIDにインデックスがあり、テーブルが完全にスキャンされています) 。
クエリーの前にクエリーを編集して結果を編集します。また、テーブル定義を表示 – Mihai
クエリーを変更できない場合は、ほとんどオプションがありません。クエリから 'OR'を取り出すことができるなら、あなたが手がけたすべてのインデックスがあります。 'OR'sは、MySQLでのインデックスの使用をほとんど排除します。 – Uueerdo