题
我知道这是一个非常基本的问题,我认为我知道答案......但我想确认一下。
这些查询真的相同吗?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
使用没有外卡时可能会有性能开销?
我有一个可选择使用LIKE&外卡。 SP目前就是这样做并附加外卡 - 我想只是更新查询以便使用,但让应用程序根据需要附加外卡。
解决方案
正如@ocdecio所说,如果优化器足够智能,那么应该没有区别,但是如果你想确定幕后发生的事情,你应该比较两个查询的执行计划。
其他提示
=
和 LIKE
之间存在差异。使用 LIKE
执行字符串比较时,模式字符串中的所有字符都很重要。这包括前导或尾随空格。
因此,如果您的列是 char
或 nchar
而不是 nvarchar
或 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 '
任何好的优化器都会将第一个表达式减少到第二个表达式。
不隶属于 StackOverflow