「这是我参与11月更文挑战的第 11 天,活动详情查看:2021最后一次更文挑战」
1、前言
上一篇的分享中,我们说到了不同数据库之间的数据迁移。当然,最后实现的方法也是比较low的,只适合全量数据的迁移。如果是大规模数据并且要求增量的话,还是推荐使用阿里的datax,更快也更安全些。本次,我们说一些SQL优化的基本原则,后续会结合实际情况及SQL代码为大家分析下。
2、优化原则
首先,我们要明白什么是SQL优化,SQL优化主要是对查询语句的优化,当然只对SQL进行优化,最终可能并不会一定解决问题。还需要结合实际情况进行数据库优化(主要是减少习用的瓶颈,资源的占用,提高我们的业务系统反应速度)。
如何排查到需要优化的SQL:
1、通过配置MySQL慢查询日志,来定期检查出慢SQL;
2、通过测试反馈的慢查询功能排查;
3、如果使用了durid连接池,可以通过SQL监控来查看SQL的执行顺序;
4、通过切面,监控接口的返回时间;
排查出慢SQL后,我们就要去尝试解决掉,常见的解决方法有:
1、SQL中避免使用select * ,指明字段名称;
2、SQL语句中的in包含的值不能太多,同时要注意in里面如果有子查询可能会导致索引失效的问题,这个我后面会结合实际例子来说明下;
3、order by的使用,如果排序的字段没有加索引,那么要尽量减少排序,如果数据量允许的情况下,可以放到代码中进行排序操作;
4、使用union all代替union,同时,在使用视图时,要注意索引失效的情况。
5、尽量不要使用%前缀进行模糊查询