SQL 性能方面,: an IF. ..ELSE 子句和 WHERE LIKE 子句哪个更好?

标签 sql sql-server-2005 tsql

我有一个存储过程,它有一个可选参数,@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/

    相关文章:

    php - 具有不同str的表迭代

    sql - 如何在左外连接中使用 CTE?

    php - 查找 3 特定行

    sql - C#/SQL 2005 中读取 BLOB 数据的内存有效方法

    sql-server-2005 - 不支持 ITransactionLocal 接口(interface)

    sql-server - 无法添加 Sql Server 登录名

    sql-server - T-SQL 中是否有替代 "IN"语句的方法?

    tsql - INNER JOIN和WHERE之间的区别?

    mysql - twitter 像关系数据库一样?

    php - 按 transaction_code 显示数据库组中的数据