ホームページ > データベース > mysql チュートリアル > EXISTS 句の最適化: SELECT 1 と SELECT * — それは重要ですか?

EXISTS 句の最適化: SELECT 1 と SELECT * — それは重要ですか?

Barbara Streisand
リリース: 2025-01-15 20:48:43
オリジナル
637 人が閲覧しました

EXISTS Clause Optimization: SELECT 1 vs. SELECT * — Does it Matter?

*EXISTS 句のパフォーマンス: SELECT 1 と SELECT **

SQL では、EXISTS 句を使用して、サブクエリ内に指定された条件に一致する行があるかどうかを確認します。開発者は長い間、EXISTS クエリで SELECT 1 と SELECT * の両方を使用してきました。そのため、どちらのアプローチがより効率的でしょうか?という疑問が生じます。

SQL サーバーの最適化

Microsoft によると、SQL Server はサブクエリの SELECT リストに関係なく、EXISTS の使用を認識できるほど賢いそうです。システムにデータを返さないため、SELECT * 句と SELECT 1 句はパフォーマンスの点で同等です。

Microsoft のドキュメントによると:

"EXISTS によって導入されるサブクエリの選択リストには、ほとんどの場合アスタリスク () が含まれます。条件を満たす行があるかどうかをテストしているだけなので、列名をリストする理由はありません。サブクエリで指定された .*"

自己検証

この動作を確認するには、次のクエリを実行します:

<code class="language-sql">SELECT whatever
FROM yourtable
WHERE EXISTS(SELECT 1/0
                 FROM someothertable
                WHERE a_valid_clause)</code>
ログイン後にコピー

SELECT リストが関与している場合、このクエリはゼロ除算エラーをトリガーします。ただし、SQL Server は EXISTS 句のコンテキストを理解するため、SELECT リストに対して計算を実行しません。

標準 SQL

ANSI SQL 1992 標準はこの動作をさらに明確にし、EXISTS 述語のコンテキストでは選択リスト "*" が任意のリテラル値と同等であると述べています。

結論

SQL Server では、EXISTS 句で SELECT 1 と SELECT * を選択してもパフォーマンスには影響しません。オプティマイザはその目的を認識し、システムにデータを返さないため、両方のメソッドは同じ結果を生成します。

以上がEXISTS 句の最適化: SELECT 1 と SELECT * — それは重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート