如:
select * from `table` where `column` like '一些文字'
select * from `table` where `column` = '一些文字'
的比较。like 中的文字不加通配符。两者执行上有何异同?
如:
select * from `table` where `column` like '一些文字'
select * from `table` where `column` = '一些文字'
的比较。like 中的文字不加通配符。两者执行上有何异同?
看mysql 手册:
http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like
like 和 = 是有区别的
手册里举例:
mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+
mysql> SELECT 'a' = 'a ', 'a' LIKE 'a ';
+------------+---------------+
| 'a' = 'a ' | 'a' LIKE 'a ' |
+------------+---------------+
| 1 | 0 |
+------------+---------------+
1 row in set (0.00 sec)
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
3 回答2k 阅读
建议你用
EXPLAIN
语句来检查一下这两条语句的的执行结果。下面是我在自己机器上用
phpMyAdmin
的性能分析工具做的测试。第一条:
第二条:
目前看来这两者几乎是没有区别的。
你最好自己做一下测试,因为在不同的机器上会有不同的表现,可能字段类型也会有影响。
更新
在 SO 上找到了这个答案:http://stackoverflow.com/questions/543580/equals-vs-like
注意这几点文字: