我有一个存储过程,它有一个可选参数,@UserID VARCHAR(50)
.问题是,有两种方法可以使用它:
NULL
, 有一个 IF...ELSE
子句,执行两个不同的 SELECT
查询,与 'WHERE UserID = @UserID'
之一而没有哪里。 '%'
然后让 where 子句使用 'WHERE UserID LIKE @UserID'
.在调用代码中,不会使用“%”,因此只会找到完全匹配的内容。 问题是:哪个选项更快?随着表的增长,哪个选项提供更好的性能?请注意
UserID
column 是外键,没有索引。编辑:根据一些答案,我想添加一些内容:
@UserID
参数不是(必然)传递的唯一可选参数。在某些情况下,有多达 4 或 5 个可选参数。
最佳答案
我通常做的是
WHERE ( @UserID IS NULL OR UserID = @UserID )
为什么它没有索引?索引 FK 通常是一种很好的形式,因为您经常加入它们......
如果您担心查询计划存储,只需执行以下操作:
创建过程...重新编译
关于SQL 性能方面,: an IF. ..ELSE 子句和 WHERE LIKE 子句哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/266697/