WHERE句でISNULLを使用すると、少なからずパフォーマンスに影響が出る。
※ISNULLに関わらず、ファンクションを噛ますことで、レコード数分ファンクションが実行されるため、テーブル件数が大きくなると、比例し処理時間がかかってくることとなると思う。
例えばISNULLをWHEREで使用しないためには、パラメタがNULLであれば、テーブル側もNULLを表示、パラメタがNULLでなければ、テーブル側とはISNULLなしで記載ができる。
DECLARE @PARA NVARCHAR(50);
SET @PARA = 'XXX' か NULL;
SELECT *
FROM SOME_TABLE
WHERE ISNULL(COLUMN1, '') = ISNULL(@PARA, '')
これを下記に書き直すことでISNULLは実行されなくなる。@PARAがNULLのときは、前半部が有効となり、NULL出ないときは、後半部が有効となる。
DECLARE @PARA NVARCHAR(50);
SET @PARA = 'XXX' か NULL;
SELECT *
FROM SOME_TABLE
WHERE ((@PARA IS NULL AND COLUMN1 IS NULL) OR (COLUMN1 = @PARA))
NULL関連: