同样逻辑的SQL语句,性能差距很大
- 条件字段:t_modified是日期,有索引
select count(*) from tradelog where month(t_modified)=7
;效率低
对索引字段做函数操作,可能会破坏索引值的有序性,优化器放弃走树索引。
写成 where t_modified >= '2022-7-1' AND t_modified < '2022-8-1'
更好,具备索引定位能力
- 隐式类型转换:table的列类型和语句类型不一致导致效率低
MySQL规则1:字符串和数字作比较,字符串转换成数字
MySQL规则2:字符集不同,表连接查询用不上关键字段索引