当前位置:  开发笔记 > 后端 > 正文

使用LIKE vs. =进行精确的字符串匹配

如何解决《使用LIKEvs.=进行精确的字符串匹配》经验,为你挑选了2个好方法。

首先,我认识到两者之间的差异:
- 比较可用的通配符%和_
- 重要的尾随空白
- 一致的问题

所有其他条件相同,对于更有效的精确字符串匹配:

SELECT field WHERE 'a' = 'a';

要么:

SELECT field WHERE 'a' LIKE 'a';

或者:差异是如此微不足道,以至于无关紧要?



1> Suroot..:

我会说=比较器会更快.词汇不会将比较发送到另一个词汇系统来进行一般匹配.相反,引擎能够匹配或继续前进.我们的数据库工作有数百万行,而且总是更快.



2> paxdiablo..:

在体面的DBMS中,DB引擎会认识到字符串中没有通配符,并将其隐式地转换为纯等式(不一定与相同=)。因此,一开始您只会受到很小的性能影响,通常对于任何体面大小的查询都可以忽略不计。

但是,MySQL =运算符不一定按照您期望的方式运行(作为纯相等性检查)。具体来说,默认情况下,它不会考虑CHARVARCHAR数据的尾随空格,这意味着:

SELECT age WHERE name = 'pax'

会给你行'pax''pax' 'pax'

如果要进行适当的相等性检查,请使用binary关键字:

SELECT field WHERE name = binary 'pax'

您可以使用以下方法进行测试:

mysql> create table people (name varchar(10));

mysql> insert into people value ('pax');
mysql> insert into people value ('pax ');
mysql> insert into people value ('pax  ');
mysql> insert into people value ('pax   ');
mysql> insert into people value ('notpax');

mysql> select count(*) from people where name like 'pax';
1

mysql> select count(*) from people where name = 'pax';
4

mysql> select count(*) from people where name = binary 'pax';
1

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有