首先,我承认两者之间的区别:
- 就像使可用通配符%和_
- 显著尾随空白
- colation发出使用像主场迎战=为精确字符串匹配
所有其他条件不变,一个精确的字符串匹配这是更有效的:
SELECT field WHERE 'a' = 'a';
或者:
SELECT field WHERE 'a' LIKE 'a';
或者:差异是否微不足道,无关紧要?
首先,我承认两者之间的区别:
- 就像使可用通配符%和_
- 显著尾随空白
- colation发出使用像主场迎战=为精确字符串匹配
所有其他条件不变,一个精确的字符串匹配这是更有效的:
SELECT field WHERE 'a' = 'a';
或者:
SELECT field WHERE 'a' LIKE 'a';
或者:差异是否微不足道,无关紧要?
我会说=比较器会更快。词法不会将比较发送到另一个词汇系统来进行一般匹配。相反,引擎能够匹配或继续前进。我们的db在工作中有数百万行,并且=总是更快。
在一个体面的DBMS中,数据库引擎会识别字符串中没有通配符,并将其隐式转换为纯粹的相等(不一定与=
相同)。所以,你在开始时只会遇到小的性能问题,通常对于任何像样大小的查询都可以忽略不计。
但是,MySQL =
运算符不一定按照您期望的方式运行(作为纯粹的相等性检查)。具体来说,它默认情况下不考虑尾部的空格为CHAR
和VARCHAR
数据,这意味着:
SELECT age WHERE name = 'pax'
会给你行的'pax'
,'pax<one space>'
和'pax<a hundred spaces>'
。
如果你想要做一个适当平等检查,使用binary
关键字:
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
霸菱一个完全新空房禁地:
你可以像测试此实施中,字符串比较风格的代价将被数据从磁盘移出的代价所压倒。写出你真正的意思,并继续编程。 – 2009-02-18 01:49:18
这已经在stackoverflow上覆盖了[here](http://stackoverflow.com/questions/543580/equals-vs-like)。我希望这有帮助。 – user34867 2009-02-18 01:36:14