mysql中的隐式转换
2016-03-14 17:30
453 查看
在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引。下面分析两种隐式转换的情况。
第一种情况:索引字段是varchar类型
select * from user where index_filed=2;
因为等号两侧类型不一致,因此会发生隐式转换,cast(index_filed as signed),然后和2进行比较。因为'2',' 2','2a'都会转化成2,故MySQL无法使用索引只能进行全表扫描,造成了慢查询的产生。
第二种情况:索引字段是int类型
select * from user where index_filed='2';
这次等号右侧是'2',注意带单引号哟,左侧的索引字段是int类型,因此也会发生隐式转换,但因为int类型的数字只有2能转化为'2',是唯一确定的。所以虽然需要隐式转换,但不影响使用索引,不会导致慢查询。
第一种情况:索引字段是varchar类型
select * from user where index_filed=2;
因为等号两侧类型不一致,因此会发生隐式转换,cast(index_filed as signed),然后和2进行比较。因为'2',' 2','2a'都会转化成2,故MySQL无法使用索引只能进行全表扫描,造成了慢查询的产生。
第二种情况:索引字段是int类型
select * from user where index_filed='2';
这次等号右侧是'2',注意带单引号哟,左侧的索引字段是int类型,因此也会发生隐式转换,但因为int类型的数字只有2能转化为'2',是唯一确定的。所以虽然需要隐式转换,但不影响使用索引,不会导致慢查询。
相关文章推荐
- 读高性能mysql笔记
- 忘记mysql密码 修改密码方法
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。
- Ubuntu下mysql-server的安装
- MySql 主键
- MySQL查看SQL语句执行效率
- MySQL索引
- MySql连接——内连接、外连接(左连接、右连接、全连接)
- MySQL索引类型总结和使用技巧以及注意事项
- YUM 安装并配置MYSQL
- Mysql 主从热备份
- MySQL查询指定行的记录
- 黄聪:MySQL 按指定字段自定义列表排序
- Mysql timestamp 类型
- servlet&jsp 及MySQL 乱码解决方案
- mysql常用字符串操作函数大全,以及实例
- 如何在Windows系统中配置Mysql群集(Mysql Cluster)
- MySQL备份之增量备份方案
- mysql 查看表结构,字段的基本信息(简单明了)。
- mysql工具篇--Workbench的使用