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

225

在SQL语句中比较字符串时,有一种(几乎是宗教性的)讨论,应该使用LIKE还是“=”。

  • 使用LIKE的理由是什么?
  • 使用“=”的理由是什么?
  • 性能?可读性?
9个回答

247

LIKE 和等号运算符有不同的用途,它们并不做相同的事情:
= 要快得多,而LIKE可以解释通配符。在您可以使用=的地方,请使用它,在必须使用LIKE的地方请使用它。

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

示例匹配:

测试用户1
测试用户2
测U


150

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

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

使用'='来比较字符串速度会更快。


6
哎呀...好的,我明白了。 有大约600个条目的表格,以10位数字作为比较字段: 相等比不相等快20到30倍! - guerda

46

根据我的小小经验:

"=" 表示完全匹配。

"LIKE" 表示部分匹配。


8
= 不区分大小写 - fanchyna

17

如果你使用的是Postgres数据库,还有一些其他的字符串匹配技巧可供使用:

ILIKE是一个大小写不敏感的LIKE匹配:

select * from people where name ilike 'JOHN'

匹配结果:

  • John
  • john
  • JOHN

如果您想要真的生气,您可以使用正则表达式:

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

匹配:

  • 约翰
  • 约翰森
  • 约翰尼

1
据我所知,正则表达式和LIKE关键字的性能比“=”差。 - Ceilingfish
Typo 'ilike' to 'like' - Salah Alshaal

13

提醒一下,在Transact-SQL中,'='操作符会在字符串中填充空格。因此,'abc' = 'abc '将返回true;'abc' LIKE 'abc '将返回false。在大多数情况下,'='是正确的选择,但在我最近的一个案例中并非如此。

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

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


10

在模式匹配时使用 LIKE,精确匹配时使用 =。


6

LIKE用于模式匹配,=用于相等性测试(由正在使用的COLLATION定义)。

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


4

LIKE是匹配通配符字符[*,?]的shell,
LIKE'%suffix' - 给我所有以suffix结尾的内容。你不能用=做到这一点。
实际情况取决于具体情况。


4

即使性能较慢,使用“like”的另一个原因是:当比较时,字符值会隐式转换为整数,因此:

declare @transid varchar(15)

if @transid != 0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接