我有一个带有默认值为NULL的参数的SP,然后我想执行以下查询:
SELECT ...
FROM ...
WHERE a.Blah = @Blah AND (a.VersionId = @VersionId OR (@VersionId IS NULL AND a.VersionId IS NULL));
在WHERE
上述检查两个非空值和一个NULL值@VersionId
。
就性能而言,最好改用一条IF
语句并将查询复制到一个搜索非NULL的查询中,而将另一个复制为NULL的查询,这样会更好吗?:
IF @VersionId IS NULL BEGIN
SELECT ...
FROM ...
WHERE a.Blah = @Blah AND a.VersionId IS NULL;
ELSE BEGIN
SELECT ...
FROM ...
WHERE a.Blah = @Blah AND a.VersionId = @VersionId;
END
还是查询优化器使它基本相同?
更新:
(注意:我正在使用SQL Server)
(据我所知,a.VersionId = @VersionId
在两种情况下都无法使用,是吗?)
2
相关文章:参数嗅探,嵌入,并重新编译选项
—
ypercubeᵀᴹ
我通常使用以下代码:ISNULL(a.VersionId,@VersionId)= @VersionId
—
628426 2015年