SQL パフォーマンス: UNION と OR の比較
SQL ステートメントの最適化に関する最近の記事では、OR と UNION の使用に関するパフォーマンスの問題が提起されました。著者はパフォーマンスを向上させるために OR を UNION に置き換えることを推奨していますが、詳しく調べると、すべての OR ステートメントがこの変換を必要とするわけではないことがわかります。
または
を使用しますOR 演算子は、どちらかの条件が true の場合に結果が true になるように条件を結合します。 SQL では、OR を列と行に適用できます。
たとえば、次のクエリは、会社が「bbc」または「itv」である行を取得します。
<code class="language-sql">select username from users where company = 'bbc' or company = 'itv';</code>
このクエリは次と同等です:
<code class="language-sql">select username from users where company IN ('bbc', 'itv');</code>
MySQL は会社列のインデックスを効果的に利用して、UNION を使用せずにこのクエリを実行できます。
UNION を使用する
UNION は複数のクエリの結果を結合します。 UNION を行に適用すると、指定された 1 つ以上の基準を満たす行が取得されますが、重複した行は除外されます。
次のクエリ内:
<code class="language-sql">select username from users where company = 'bbc' union select username from users where city = 'London';</code>
UNION を使用すると、各サブクエリが独自のインデックスを利用して検索を最適化できます。次に、UNION は 2 つのサブクエリの結果を結合します。
OR または UNION を使用する場合
次の条件が満たされる場合は、OR の方が適しています:
次の条件が満たされる場合、UNION はより効率的になります:
並べ替えと結合
UNION では、重複行を排除するためにソートのオーバーヘッドが発生します。ただし、このオーバーヘッドは通常、結果のごく一部に影響します。通常、ソートのコストは、サブクエリ インデックスを使用して得られる最適化よりも低くなります。
したがって、最も適切な方法 (OR または UNION) を決定するには、特定のデータと検索基準を慎重に検討する必要があります。 MySQL Query Analyzer を使用して両方のアプローチをベンチマークすると、決定的なパフォーマンスの洞察が得られます。
以上がSQL パフォーマンス: OR と UNION のどちらを使用すべきか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。