mlu*_*bke 32 mysql string performance
首先,我认识到两者之间的差异:
- 比较可用的通配符%和_
- 重要的尾随空白
- 一致的问题
所有其他条件相同,对于更有效的精确字符串匹配:
SELECT field WHERE 'a' = 'a';
Run Code Online (Sandbox Code Playgroud)
要么:
SELECT field WHERE 'a' LIKE 'a';
Run Code Online (Sandbox Code Playgroud)
或者:差异是如此微不足道,以至于无关紧要?
在体面的DBMS中,DB引擎会认识到字符串中没有通配符,并将其隐式地转换为纯等式(不一定与相同=)。因此,一开始您只会受到很小的性能影响,通常对于任何体面大小的查询都可以忽略不计。
但是,MySQL =运算符不一定按照您期望的方式运行(作为纯相等性检查)。具体来说,默认情况下,它不会考虑CHAR和VARCHAR数据的尾随空格,这意味着:
SELECT age WHERE name = 'pax'
Run Code Online (Sandbox Code Playgroud)
会给你行'pax','pax<one space>' 和 'pax<a hundred spaces>'。
如果要进行适当的相等性检查,请使用binary关键字:
SELECT field WHERE name = binary 'pax'
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法进行测试:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52290 次 |
| 最近记录: |