MYSQL では、あまり変更したくない Wordpress プラグインのコードが次のクエリを実行しています。
SELECT * WHERE cond1 AND (field1 = val1 OR field2 = val2)
ただし、val1 と val2 にインデックスがあるにもかかわらず、実行速度は非常に遅くなります。(遅いクエリ ログは、すべての行をスキャンすることを確認します。)MYSQL に、式を常に次の同等のより高速な形式に展開する必要があることを示唆できますか?
SELECT * WHERE cond1 AND (field1 = val1)
UNION
SELECT * WHERE cond1 AND (field2 = val2)
これにより、スキャンされる行数が大幅に削減されるため、パフォーマンスが大幅に向上します。私も同じことを疑問に思います
SELECT * WHERE cond1 AND (field1 in (val1, val2))
ありがとう!
編集: テーブルに関する情報とクエリの説明はhttp://pastebin.com/Qd1ZaVKDにありますが、一貫性がないようです。myphpadmin からクエリを実行すると、低速のクエリ ログ エントリが生成される場合と生成されない場合があります。他のユーザーがそのような行を引き起こしているときに引き続き生成されたとしてもです。