6

インターネットで見つけた記事の中には、ISNULLとCOALESCEを比較したものもあるので、私の質問は少し違うと思います。

パフォーマンスの面でどちらが優れているのだろうか?

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';

または

SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> '';

パフォーマンス以外に、決定する際に考慮すべき他の懸念事項はありますか?

編集:

私はTeradataを使用しています。

4

2 に答える 2

7

このバージョンは、わずかに sargable であり、インデックスを (潜在的に) 使用できます。

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';

に簡略化できます

SELECT * FROM mytable WHERE mycolumn <> '';

私が「わずかに」および「潜在的に」と言う理由は、不等式の述語は、最終的にはフル スキャンになることを意味する可能性があるからです。

于 2010-10-14T16:31:39.770 に答える
1

ANSI_NULL ON 設定の使用を検討することもできます。これにより、検索引数を発行する列の null 値が暗黙的に除外されます。これを行うとクエリが簡素化されますが、高速になるかどうかはわかりません。ただし、論理的には、評価する必要があるフィルター引数が少なく、完全なインデックスの選択性を有効にする where 句で関数が使用されていないため、そうする必要があります。例として、次のようにクエリをリファクタリングできます。

SET ANSI_NULLS ON;
SELECT * FROM mytable WHERE NOT mycolumn = '';

これが役立つことを願っています。

于 2010-10-14T16:51:13.247 に答える