ホームページ >データベース >mysql チュートリアル >EXISTS サブクエリの SELECT 1 と SELECT * : パフォーマンスに影響しますか?

EXISTS サブクエリの SELECT 1 と SELECT * : パフォーマンスに影響しますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-15 20:14:42887ブラウズ

SELECT 1 vs. SELECT * in EXISTS Subqueries: Does it Matter for Performance?

*EXISTS サブクエリの最適化: SELECT 1 と SELECT のパフォーマンスの違い **

SQL クエリで EXISTS 演算子を使用する場合、サブクエリで SELECT 1 を指定するか SELECT * を指定するかについて議論があります。この記事では、両方のアプローチのパフォーマンスへの影響について説明します。

**従来の方法: SELECT ***

伝統的に、サブクエリ内のすべての列を取得するため、サブクエリでは SELECT * が使用されます。

<code class="language-sql">IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END</code>

代替方法: SELECT 1

データベースの専門家は、EXISTS チェックでは、単一の値のみを返すため、SELECT 1 を使用する方が効率的であることを推奨しています。

<code class="language-sql">IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END</code>

パフォーマンスの違い

SELECT 1 には潜在的なパフォーマンス上の利点があるとされていますが、Microsoft SQL Server は EXISTS 演算子のサブクエリを最適化するように設計されています。 SELECT 1 を使用しても SELECT * を使用しても、SQL Server はシステムにデータを返しません。

検証

この最適化を検証するには、次のクエリを実行してみてください:

<code class="language-sql">SELECT whatever
  FROM yourtable
 WHERE EXISTS( SELECT 1/0
                 FROM someothertable 
                WHERE a_valid_clause )</code>

サブクエリが無効な除算を実行した場合でも、エラーはスローされません。これは、SELECT サブクエリ内の EXISTS リストが評価されないことを示します。

標準 SQL

ANSI SQL 1992 標準では、SELECT リストの EXISTS サブクエリに「*」のみが含まれる場合、それは任意のリテラルと同等であると明確に規定されています。

結論

SQL Server の最適化機能と SQL 標準に基づくと、EXISTS サブクエリで SELECT 1 または SELECT * を使用してもパフォーマンスに違いはありません。どちらのメソッドも同じ効率で同じ結果を返します。

以上がEXISTS サブクエリの SELECT 1 と SELECT * : パフォーマンスに影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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