mysql数据库逻辑查询优化之SQL等价变换

逻辑查询优化,就是通过对SQL语句进行等价变换,让SQL执行效率更高。

子查询/大查询优化
1. 避免使用子查询,建议将子查询优化为 join 操作。旨在解决子查询导致的大量慢查询问题(子查询会产生大量没有索引的临时表,它们会消耗过多的 CPU 和 IO 资源,从而产生大量的慢查询)。
2. 避免复杂大SQL语句,建议拆分复杂的大 SQL 为多个小 SQL。旨在通过对大SQL语句拆分,并行执行语小SQL语句来提升CPU处理效率。
在大数据表中使用分页查询,以及对非索引字段进行排序等等。

连接消除/优化
1. 避免使用3个表以上的JOIN连接查询,建议控制JOIN表的数量在3个以内。旨在降低MySQL关联过程中产生的临时表对查询效率的影响。
2. 建议在生产系统中,不要使用左外关联,右外关联和全外关联。

其他SQL开发规范
1. 避免使用SELECT * 或 SELECT COUNT(*),建议使用SELECT字段列表>查询,旨在减少cpu、io、内存、网络带宽的消耗。
2. 避免对数据类型的隐式类型转化,建议给字段带上数据类型。旨在避免隐式转换导致索引不可用。
3. 避免对同一字段使用 or 判断,建议使用 in 代替 or,旨在充分利用索引。
4. 建议合理使用分页方式来提高分页的效率。因为MySQL使用的是提前读取策略,不合适的分页方式会导致大量的io。
5. 不建议对非索引字段进行排序。
6. 禁止在SQL语句中使用SQL提示,如force index,ignore index,straight_join等。