47

我知道这是一个非常基本的问题,我我知道答案……但我想确认一下。

这些查询真的等价吗?

SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'

在没有通配符的情况下使用 like 可能会产生性能开销?

我有一个可以选择使用 LIKE 和通配符的应用程序。SP 当前执行类似操作并附加通配符 - 我正在考虑更新查询以使用 like 但让应用程序根据需要附加通配符。

4

3 回答 3

32

正如@ocdecio 所说,如果优化器足够聪明,应该没有区别,但是如果您想确定幕后发生的事情,您应该比较两个查询的执行计划。

于 2008-12-31T23:07:18.093 回答
17

Matt Whitfield 的原始答案来自这里

=和之间有区别LIKE。使用 执行字符串比较时LIKE,模式字符串中的所有字符都是有效的。这包括前导或尾随空格。

因此,如果您有一列是charornchar而不是nvarcharor 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  '
于 2016-06-13T11:18:51.863 回答
7

任何好的优化器都会将第一个表达式减少到第二个。

于 2008-12-31T23:04:08.647 回答