今天小朱老师为大家准备的小知识点是MySQL查询优化,可以帮助大家提升工作效率,减少繁琐操作,话不多说,下面就一起来学习吧。
1、为什么查询速度会慢?
首先我们要明确一个问题,查询速度慢的原因是什么?要明确这个问题就要了解查询的执行逻辑:一个查询的逻辑是从客户端开始,到服务器,在服务器上进行解析生成执行计划,然后执行将结果返回给客户端。其中在”执行“阶段包含了大量的数据调用以及调用之后的数据处理,比如排序和分组。那么查询速度慢的原因就是多了某些不必要的操作,或者操作重复、执行较慢等等。优化查询的目的其实也就是减少操作和操作花费的时间。
2、慢查询基础:优化数据访问:
性能低下最主要的原因就是访问的数据量太大,那么可以从这方面入手:
2.1、确认查询的数据是否都是需要的
请求多余的数据会对服务器造成额外的负担,消耗大量的内存和资源。具体表现在:
1、查询不需要的记录:比如我们只需要在前端展示10条数据,但是我们的请求取出了条。实际上MySQL会取出所有的数据,我们会接收全部的数据,然后抛弃其中一部分数据。这时候可以通过添加limit限制查询的条数。
2、多表关联的时候返回全部字段:
3、总是取出全部的列:每次在使用select*的时候无法使用索引覆盖扫描的优化,还会增加内存、CPU的消耗。获取并缓存额外的列的时候要考虑清楚代价。
4、查询重复的数据:在数据分析的时候可能需要不断地重复执行相同的查询操作,这时候可以将开始的数据缓存起来,需要的时候拿过来用即可。
2.2、MySQL是否在扫描额外的记录
当确定了我们需要的数据之后,就有了三个指标去衡量是否扫描了过多的数据:
查询时间:包括服务时间和排队时间的总和
扫描和返回的行数:最理想的情况是扫描和返回的数据行数是相等的,但是一般很难做到,只要控制在1:1-10:1之间即可。
3、重构查询的方式
我们是应该选择一个负责的查询还是多个简单的查询?
MySQL内部的扫描速度在上百行,但是MySQL返回给客户端的数据就会变慢,所以尽量使用查询比较少的比较好。
分解查询的方法:
3.1、切分查询
可以尝试将大的查询切分为几个小的查询,每个小的查询功能类似,就可以持续执行小的查询。比如我们需要删除大量数据:
每次删除一万条数据对服务器的负担比较小,注意一点是在删除之后暂停一下再次执行。
3.2、分解关联查询
可以将多表的关联查询拆解成多条查询,其实就是将关联的步骤放在了应用层。示例:
这样可以把各种数据缓存下来,将来需要的时候可以直接查询;
在应用层做关联,可以更容易对数据库拆分;
减少了冗余数据的查询。
这个优化小技巧是不是对你有所帮助呢?
今日福利准备是的《SQL基础教程(第2版)》,希望大家在不断成长的时候也不要忘了巩固基础。