前言:
在开发中,我们测试刚编写的接口时感觉执行速度不慢,便没有着重管理SQL语句是否合理。之后随着数据量的增加,接口响应速度显著慢了许多,此时,我们就要考虑SQL的优化了。
SQL优化是为更高效的对数据库进行查询和操作。所以下面的操作,都是围绕这个中心来展开的。
目录
一、查询语句的优化
1、使用合适的查询语句:
根据情况选择INNER JOIN 和 OUTER JOIN(左右连接、全外连接),减少不必要的数据处理。(INNER JOIN 和 OUTER JOIN 的区别,详见:此文章)
2、限制返回行的数量:
可以在SQL中使用 limit ,如:limit 10 ,每次查询只返回10条数据。
3、避免SELECT * :
在SQL查询语句中,我们只选择自己所需要的列,减少数据传输数量。
补充:虽然在MySQL8.0对select * 提供了更友好的支持,但我们还是尽量去按照自己需要什么列就查询什么列,一方面节省资源,提升效率;另一方面也方便后期的维护,不然一看这SQL中是个 * 号,不能直观获取到查询的字段信息。
二、索引的优化
1、创建合适的索引:
根据实际业务,在查询条件(where、join、order by)中创建合适的索引。
2、避免过多的索引:
索引是把双刃剑,适当的添加索引能极大提高接口性能,但过多的索引会导致弄巧成拙,反而降低我们的写入性能。
三、执行计划(explain)的分析
通过explain查询SQL执行计划,了解我们索引的使用情况,可以帮我我们找到性能瓶颈。
四、表设计
1、设计数据库是,要求符合三大范式,尽量减少冗余字段(可以将冗余字段存入一张冗余字段表中)。
2、分区:
对于非常大的表,可以采用分区技术,将表划分为多个部分,提高查询效率。
五、参数化查询
避免SQL注入攻击,并且允许数据库重用explain执行计划,从而提高SQL性能。