複数の列でEXISTSを効率的にチェックする方法は?
これは私が定期的に出くわす問題であり、まだ良い解決策を見つけていません。 次のテーブル構造を想定 CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) 及び要件はNULL可能列のいずれかかどうかを決定することであるBまたはC実際に含むNULL値(及び場合どのように一方(S))。 また、テーブルに数百万行が含まれていると仮定します(このクラスのクエリのより一般的なソリューションに興味があるため、覗くことができる列統計はありません)。 これにアプローチする方法はいくつか考えられますが、すべてに弱点があります。 2つの別個のEXISTSステートメント。これには、a NULLが見つかるとすぐにクエリがスキャンを停止できるという利点があります。ただし、実際に両方の列にが含まれていないNULL場合、2回の完全スキャンが実行されます。 単一の集計クエリ SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) AS C FROM T …