SQL Server:'='和'like'运算符之间是否存在性能开销?

jra*_*ara 2 sql t-sql sql-server sql-server-2008

这两个查询之间的性能有差异吗?

--= operator
SELECT COL1, COL2 
FROM DBO.MYTABLE 
WHERE COL1 = '1'

--like operator
SELECT COL1, COL2 
FROM DBO.MYTABLE 
WHERE COL1 LIKE '1'
Run Code Online (Sandbox Code Playgroud)

在这种情况下基本上使用LIKE是错误的,但数据库引擎接受此.

Dar*_*rov 6

查看以下帖子.

引用(如果它离线):

我的下意识反应是=会更快,但我想到了它并意识到查询优化器实际上会将它们看作同样的事情.针对快速创建的tbFoo检查查询计划确认了它.这就是我告诉他的.

除了我稍后意识到有一个重要的警告 - 查询优化取决于语句的参数化方式.如果它是纯粹的临时SQL并且在运行时被编译,那么语句是等价的,但是如果要重新使用任何计划,可以通过在存储过程中包含语句或者准备它并通过sp_executesql执行, LIKE会施加重大惩罚.

这是因为优化器在编译时不知道LIKE运算符的参数是否包含通配符,因此它不能使用与=运算符相关的更具体的优化(包括索引选择).因此,如果您主要传递没有通配符的参数,那么您将执行次优的查询计划.在设计查询时请记住这一点!

  • +1但请将该帖子的结论复制到您的答案中,以便即使博客在某些时候不可用,答案仍然相关. (2认同)