开发者社区> 问答> 正文

在SQL性能方面,有更好的选择:IF…ELSE子句或WHERE LIKE子句?

我有一个具有可选参数的存储过程@UserID VARCHAR(50)。事实是,有两种方法可以使用它:

给它一个默认值NULL,有一个IF...ELSE子句,它执行两个不同的SELECT查询,一个查询带有'WHERE UserID = @UserID'和不带有where。 给它一个默认值,'%'然后使用where子句'WHERE UserID LIKE @UserID'。在调用代码中,不会使用'%',因此只能找到完全匹配的内容。 问题是:哪个选项更快?随着表的增长,哪个选项可以提供更好的性能?请注意,该UserID列是外键,没有索引。

编辑:基于一些答案,我想添加一些东西:该@UserID参数不是(不必要)传递的唯一可选参数。在某些情况下,最多有4个或5个可选参数。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 16:26:35 545 0
1 条回答
写回答
取消 提交回答
  • 我通常要做的是

    WHERE ( @UserID IS NULL OR UserID = @UserID ) 为什么不索引呢?索引FK通常是一种很好的形式,因为您经常加入它们。

    如果您担心查询计划的存储,只需执行以下操作:CREATE PROCEDURE ... WITH RECOMPILE

    2019-11-18 16:26:44
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载