ホームページ >データベース >mysql チュートリアル >MySQL の WHERE IN 句で複数の列をインデックスとともに効率的に使用する方法

MySQL の WHERE IN 句で複数の列をインデックスとともに効率的に使用する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-22 12:06:34179ブラウズ

How to Efficiently Use Multiple Columns in MySQL's WHERE IN Clause with Indexes?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。