ホームページ >データベース >mysql チュートリアル >MySQL の WHERE IN 句で複数の列をインデックスとともに効率的に使用する方法
IN 句内の MySQL の複数の列
問題:
次のデータベース テーブルがあります。地理座標を表す 4 つの列: x0、y0、x1、および y1。これらの列には、x0、y0、x1、y1 の順序でインデックスが付けられています。 WHERE IN 句の座標ペアのリストを使用してテーブルを効率的にクエリしたいとします。
解決策:
インデックスを効果的に使用するには、IN 述語を次のように書き換えます。一連の OR 条件。各条件は現在の行の座標を行の座標ペアと比較します。 list.
例:
の代わりに:
(x0, y0, x1, y1) IN ((4, 3, 5, 6), (9, 3, 2, 1))
使用:
( ( 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 の新しいバージョンでは、オプティマイザが改良され、そのようなクエリでインデックスをより適切に利用できるようになりました。構文:
(a,b) IN ((7,43),(7,44),(8,1))
は長い間サポートされてきましたが、以前からパフォーマンスの問題が存在していました。新しいオプティマイザーは、より効率的な実行プランを生成するようになりました。
注:
同様の最適化が WHERE 句の OR 構造に適用されます。効率を向上させるには、
WHERE ( seq >= 7 ) AND ( seq > 7 OR sub > 42 )の代わりに:
WHERE ( seq > 7 ) OR ( seq = 7 AND sub > 42 )を使用することを検討してください。
以上がMySQL の WHERE IN 句で複数の列をインデックスとともに効率的に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。