首先,我认识到两者之间的差异:
- 比较可用的通配符%和_
- 重要的尾随空白
- 一致的问题
所有其他条件相同,对于更有效的精确字符串匹配:
SELECT field WHERE 'a' = 'a';
要么:
SELECT field WHERE 'a' LIKE 'a';
或者:差异是如此微不足道,以至于无关紧要?
我会说=比较器会更快.词汇不会将比较发送到另一个词汇系统来进行一般匹配.相反,引擎能够匹配或继续前进.我们的数据库工作有数百万行,而且总是更快.
在体面的DBMS中,DB引擎会认识到字符串中没有通配符,并将其隐式地转换为纯等式(不一定与相同=
)。因此,一开始您只会受到很小的性能影响,通常对于任何体面大小的查询都可以忽略不计。
但是,MySQL =
运算符不一定按照您期望的方式运行(作为纯相等性检查)。具体来说,默认情况下,它不会考虑CHAR
和VARCHAR
数据的尾随空格,这意味着:
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