【SQL】ISNULLをSTORED PROCEDUREのWHEREで使用しない

Sponsored Links

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関連:

IT
Sponsored Links
Sponsored Links
Sponsored Links
ようさんチョットでぶ
Copied title and URL
Bitnami