さまざまな列にわたる地理座標を含むデータベースを操作する場合、座標のリストに基づいてデータを効率的にクエリします。重要になる可能性があります。この場合、x0、y0、x1、y1 の 4 つの列を含むテーブルがあり、それぞれが特定の地理的位置を表します。テーブルには、シーケンス x0、y0、x1、y1 の 4 つの列に基づいてインデックスが付けられます。
このようなデータをクエリするには、複数の列で IN 句を使用すると効果的です。ただし、MySQL には、(a, b) IN ((...), (...)) 構文を直接使用する場合、特定の制限があります。
効率を最大化するための IN 述語の書き換え:
これらの制限を克服し、既存のインデックスを活用するには、IN 述語を一連の OR 条件として書き直すことができます。各条件は、4 つのカラムの値が指定された座標ペアの 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 の新しいバージョンでの最適化:
MySQL の新しいバージョンでは次のような問題が解決されていることに注意してください。複数の列で IN 句を使用することに関連するパフォーマンスの問題。これらのバージョンのオプティマイザは、より効率的な実行プランを生成するように改良されました。
特に、(a, b) IN ((...), (...)) 構文が MySQL でサポートされるようになりました。 、オプティマイザーは、使用可能なインデックスを活用するプランを生成できます。これにより、上記のような IN 述語を手動で書き直す必要がなくなります。
以上がMySQL で IN 句を使用して複数の列を効率的にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。