使用“ =”或LIKE比较SQL中的字符串?


169

如果您应该使用LIKE或'='在SQL语句中比较字符串,则有一个(几乎是宗教性的)讨论。

  • 有理由使用LIKE吗?
  • 是否有使用'='的理由?
  • 性能?可读性?

Answers:


126

要查看性能差异,请尝试以下操作:

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name

SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name

将字符串与“ =”进行比较要快得多。


5
糟糕...好吧,我明白了。带有约600个条目的表,比较字段为10位数字:等于快20到30倍!
guerda

194

LIKE和相等运算符有不同的用途,它们执行的操作不同:
=速度更快,而LIKE可以解释通配符。=在可能的LIKE地方和必须的地方使用。

SELECT * FROM user WHERE login LIKE 'Test%';

匹配样本:

TestUser1
TestUser2
TestU
测试



14

Postgres还提供了其他一些技巧来进行字符串匹配(如果碰巧是您的数据库):

ILIKE,是不区分大小写的LIKE匹配:

select * from people where name ilike 'JOHN'

火柴:

  • 约翰
  • 约翰
  • 约翰

如果您想发疯,可以使用正则表达式:

select * from people where name ~ 'John.*'

火柴:

  • 约翰
  • 约翰松
  • 强尼

1
据我所知,正则表达式和like关键字的性能比'='更差
Ceilingfish 2009年


9

就像抬头一样,'='运算符将在Transact-SQL中用空格填充字符串。因此'abc' = 'abc '将返回true;'abc' LIKE 'abc '将返回false。在大多数情况下,“ =”将是正确的,但在我最近的情况下则不是。

因此,虽然'='更快,但LIKE可能会更明确地说明您的意图。

http://support.microsoft.com/kb/316626



6

LIKE用于模式匹配并=用于相等性测试(由COLLATION使用中定义)。

=可以使用索引,而LIKE查询通常需要测试结果集中的每条记录以将其过滤掉(除非您使用的是全文搜索),因此=具有更好的性能。


4

LIKE会像在shell
LIKE'%suffix' 一样使用通配符char [* ,?]进行匹配-给我所有以后缀结尾的内容。您不能使用=来做到这一点,
实际取决于情况。


3

即使性能较慢,还有另一个原因使用“喜欢”:比较时,字符值隐式转换为整数,因此:

声明@transid varchar(15)

如果@transid!= 0

会给您“ varchar值'123456789012345'的转换溢出int列”错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.