我知道这是一个非常基本的问题,我想我知道答案……但我想确认一下。
这些查询真的等价吗?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
在没有通配符的情况下使用 like 可能会产生性能开销?
我有一个可以选择使用 LIKE 和通配符的应用程序。SP 当前执行类似操作并附加通配符 - 我正在考虑更新查询以使用 like 但让应用程序根据需要附加通配符。
正如@ocdecio 所说,如果优化器足够聪明,应该没有区别,但是如果您想确定幕后发生的事情,您应该比较两个查询的执行计划。
Matt Whitfield 的原始答案来自这里
=
和之间有区别LIKE
。使用 执行字符串比较时LIKE
,模式字符串中的所有字符都是有效的。这包括前导或尾随空格。
因此,如果您有一列是char
ornchar
而不是nvarchar
or varchar
,则会由于尾随空格而产生不同的结果。
重现此行为的小示例:
CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello ')
SELECT * FROM #temp WHERE [nam] = 'hello '
SELECT * FROM #temp WHERE [nam] LIKE 'hello '
任何好的优化器都会将第一个表达式减少到第二个。