Mysql查询语句中的引号对索引的影响
程序员文章站
2022-03-08 08:18:07
...
# explain select * from t1 where user_ip=123 limit 1;-------------------------------------------------------------------------------------------| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |-------
# explain select * from t1 where user_ip=123 limit 1; +----+-------------+-------------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | t1 | ALL | user_ip | NULL | NULL | NULL | 262 | Using where | +----+-------------+-------------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec) # explain select * from t1 where user_ip='123' limit 1; +----+-------------+-------------+------+---------------+---------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------+------+---------------+---------+---------+-------+------+-------------+ | 1 | SIMPLE | t1 | ref | user_ip | user_ip | 47 | const | 1 | Using where | +----+-------------+-------------+------+---------------+---------+---------+-------+------+-------------+ 1 row in set (0.01 sec)
可以看到, user_ip 字段是 varchar 类型. 查询时, 如果这个字段的值没有加引号, MySQL 就不会使用索引. MySQL 为什么会有这种致命的策略?!
—– 更新: —–
相关的文档已经找到: http://dev.mysql.com/doc/refman/5.5/en/type-conversion.html, 这里面提到和几种类型转换的情况, 字符串和数字比较都被统一转成浮点数再比较.
Related posts:
- MySQL”海量数据”查询性能分析
- MySQL 查询使用 Group By 的注意点
- 史上最强大的PHP MySQL操作类
- MySQL 建立外键约束
- 如何使用SSDB的zscan命令
上一篇: mysql查询语句的总结
下一篇: php,mysql查询语句出错解决方案