IN 句の複数の列に対する MySQL の効率的なクエリ
MySQL データベースには、開始位置と地理座標 x、y に対応する 4 つの列があります。終了位置。あなたは、地理的ペアの約 100 の組み合わせのリストを使用して、このデータに対して効率的なクエリを実行したいと考えています。
Oracle の回答で提案されているように、総当たりのアプローチは IN 句を使用することです。
SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6), ... ,(9, 3, 2, 1));
ただし、このアプローチは、特に行数が多い MySQL では効率的ではありません。
クエリを最適化するには、次のようにします。これら 4 つの列のインデックスを利用できます。 IN 述語を一連の OR 条件として書き換えることができます:
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 ) )
個別の条件を使用することで、MySQL に各条件のインデックスの使用を強制し、クエリのパフォーマンスを大幅に向上させます。
新しい MySQL バージョンに関する注意事項
新しいバージョンの MySQL では、オプティマイザが改良されましたより効率的な実行計画を生成します。 (a,b) IN ((7,43),(7,44),(8,1)) 構文は長い間サポートされてきましたが、以前のバージョンではパフォーマンスの問題が発生しました。ただし、これらの問題は解決されており、新しいオプティマイザーは OR 構造のインデックスを効果的に使用できるようになりました。
結論
OR 条件アプローチを使用すると、 IN 句で複数の列を検索するときの MySQL クエリの効率を向上させます。この手法では、利用可能なインデックスを活用し、大規模なデータセットの最適なパフォーマンスを保証します。
以上がIN 句に複数の列を使用して MySQL に効率的にクエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。