书写高质量SQL的建议
undefined不过,也会有百分号后面不使用索引的情况。 MySQL的innodb存储引擎最终执行哪种方法是基于成本计算的。它比较全表扫描和二级索引,然后返回表查询。
能够通过
INFORMATION_SCHEMA.OPTIMIZER_TRACE来分析查询过程
复制trace字段json就可以分析了
5、查询SQL时尽量不要使用select *。相反,选择特定字段并且不返回任何未使用的字段。
反例:(统计用户数)
从 t 中选择 *
正面例子:
从 t 选择 ID、姓名、电话
原因:
阻止优化器选择更好的执行计划,例如索引扫描
添加或删除字段可能会导致代码崩溃
6.尽量避免在索引列上使用mysql的内置函数。
反例:
select * from user where date_add(create_time,Interval 5 day) >=now()
正面例子:
select * from user where create_time >= date_add(now(), 间隔 - 5 天)
无索引
遍历索引
7、尽量避免对where子句中的字段进行表达式操作,这会导致系统放弃使用索引而进行全表扫描。
反例:(对字段user_age进行操作,不建立索引)
从用户中选择*,其中 user_age - 1 = 2
正例:(取索引)
从用户中选择 *,其中 user_age = 3