MySQL影响查询效率的因素

  1. 条件字段使用函数操作

索引字段使用函数操作后,无法使用索引的快速定位功能(树搜索功能),但优化器并未放弃使用索引,优化器会对比索引字段与主键索引的大小,最终决定使用较小的所引树,进行全部遍历。
例如:select * from tradelog where id + 1 = 10000 就会导致全表扫描。
select * from tradelog where id = 10000 -1则不会导致全表扫描。

实际工作中可使用其他方式对条件进行分割,或者union连接查询等操作避免条件字段使用函数。

  1. 隐式类型转换

条件字段与参数类型不一致时,会发生转换
转换原理: 字符串与数字比较时,会将字符串转换为数字。(id例外)

例如:select ‘2’ > 1 相当于 select CAST(‘2’ AS signed int) 相当于是对条件字段使用类型转换函数,会导致全表扫描。
select * from table where id = ‘2’相当于select * from table where id = CAST(‘2’ AS signed int) 不会导致全表扫描。

实际工作中使比较的类型匹配即可。

  1. 隐式字符编码转换

两个表关联查询时,两表中的字段字符集不一致,会发生类型转换。
转换原理:按数据长度增加的方向转换,比如 utf8类型的与utf8mb4比较时,会将utf8向utf8mb4方向转换。
遇到类似情况,最好的方式是修改为一致的编码集,如果表数据较多,且执行修改影响较大,可将编码类型长度更大的字段作为条件字段的驱动表(放在比较二者的左侧)可避免全表扫描。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容