4

列(約5万レコードのテーブル)から、列に少なくとも2つの異なる値が含まれているかどうかを確認する必要があるという答えを探しています。

Select Count(Distinct ColumnA)
from tableX 

上記のクエリで出力が得られますが、ブール値で答えが必要なため、最適化された方法ではありません。

すなわち、カウントは1以上ですか、それともいいえですか?

さらに、tableXでレコード数が増えると、クエリのパフォーマンスが低下します。テーブルのレコード数に依存しないものを探しています。どんな助けでもありがたいです:)ありがとう。

4

1 に答える 1

6
SELECT CASE
         WHEN COUNT(*) = 2 THEN 'Yes'
         ELSE 'No'
       END
FROM   (SELECT DISTINCT TOP 2 ColumnA
        FROM tableX
        WHERE ColumnA IS NOT NULL) T 

DISTINCT最初の2つの値が見つかった後、処理を停止する計画が表示される可能性があります。

実行プランがストリームアグリゲートまたはを使用していることを確認してくださいHASH MATCH (FLOW DISTINCT)。どちらも非ブロッキングです。がなしで実装されている場合、これDISTINCTはブロックされ、すべての行が引き続き処理されます。HASH MATCH(FLOW DISTINCT)

たとえば、これらのプランは両方とも、すべての行を処理せずに停止します。

プラン

于 2013-03-20T10:14:55.537 に答える