データベースがフィルタリング式を評価する順序を当てにすることはできません。 SQL を評価し、最高のパフォーマンスが得られると認識した内容に基づいてクエリを実行する計画を作成するクエリ オプティマイザーがあります。 .
このコンテキストでは、 IsNumeric()
これは、テーブル内のすべての行に対して関数を実行することを意味します。したがって、ほとんど 知覚される最高のパフォーマンスを提供します。これを SrcID > 15
と比較してください これは、インデックス (存在する場合) と一致する可能性があり、存在しない場合でも単一の演算子式です。 IsNumeric()
関数を実行する必要があります。
これは、ビュー、サブクエリ、CTE、CASE ステートメント、または計算列を使用して回避できる可能性があります。以下は CTE の例です:
With NumericOnly As
(
SELECT <columns> FROM MyTable WHERE IsNumeric(SrcID) = 1
)
SELECT <columns> FROM NumericOnly WHERE SrcID > 15
CASE ステートメントのオプションは次のとおりです。
SELECT <columns> FROM MyTable WHERE CASE WHEN IsNumeric(SrcIC) = 1 THEN Cast(SrcID As Int) ELSE 0 END > 15