3

SQL Server のisnull()関数とキーワードに関する質問があります。is null

SQL ステートメントの where 句で以下の条件を記述すると、パフォーマンスが低下することを知っています。

isnull(@C_FirstName, '') <> ''

同じものを置き換えることができます

 (@C_FirstName IS NOT NULL AND @C_FirstName <> '') 

where節で

しかし、if 条件の場合、パフォーマンスは向上しますか?

以下は、2 つのオプションを使用した例です。

オプション1:

If `isnull(@C_FirstName, '') <> ''`  

オプション #2:

If `(@C_FirstName IS NOT NULL AND @C_FirstName <> '')`

オプション 1 とオプション 2 のうち、どちらのステートメントが推奨されますか?

4

1 に答える 1

2

ISNULL (または COALESCE) は、結合などでセットを結合する場合や、データをフィルタリングする場合に、パフォーマンスに影響を与える可能性があります。比較対象の属性に操作を適用しているため、オプティマイザーはインデックスの順序付けに依存しません。データベース エンジンは、既存のインデックスを効率的に使用しません。52 ページからの言い換え - Microsoft SQL Server 2012 のクエリ - トレーニング キット

私たちのデータベース システムでは、現在、ビュー内の同様のコードを次のように置き換えています。

SELECT ISNULL(Salesman, '')
FROM Order

これに:

SELECT CASE WHEN IS NULL Salesman THEN '' ELSE Salesman END
FROM Order

コードのサイズを大きくしているため、少し直感に反するように思えるかもしれませんが、特定のビューを広範囲に活用すると、パフォーマンスがわずかに向上することがわかりました。

于 2014-10-29T23:26:26.683 に答える