九道门|一日一技:MySQL查询优化
发布时间:2023-02-06 13:48:23 所属栏目:MySql教程 来源:
导读: 今天小朱老师为大家准备的小知识点是MySQL查询优化MySQL 查询数据,可以帮助大家提升工作效率,减少繁琐操作,话不多说,下面就一起来学习吧。
1、为什么查询速度会慢?
首先我们要明确一个问题
1、为什么查询速度会慢?
首先我们要明确一个问题
今天小朱老师为大家准备的小知识点是MySQL查询优化MySQL 查询数据,可以帮助大家提升工作效率,减少繁琐操作,话不多说,下面就一起来学习吧。 1、为什么查询速度会慢? 首先我们要明确一个问题,查询速度慢的原因是什么?要明确这个问题就要了解查询的执行逻辑:一个查询的逻辑是从客户端开始,到服务器,在服务器上进行解析生成执行计划,然后执行将结果返回给客户端。其中在”执行“阶段包含了大量的数据调用以及调用之后的数据处理,比如排序和分组。那么查询速度慢的原因就是多了某些不必要的操作,或者操作重复、执行较慢等等。优化查询的目的其实也就是减少操作和操作花费的时间。 2、慢查询基础:优化数据访问: 性能低下最主要的原因就是访问的数据量太大,那么可以从这方面入手: 2.1、确认查询的数据是否都是需要的 请求多余的数据会对服务器造成额外的负担,消耗大量的内存和资源。具体表现在: 1、查询不需要的记录:比如我们只需要在前端展示10条数据,但是我们的请求取出了100条。实际上MySQL会取出所有的数据,我们会接收全部的数据,然后抛弃其中一部分数据。这时候可以通过添加limit限制查询的条数。 2、多表关联的时候返回全部字段: 3、总是取出全部的列:每次在使用select * 的时候无法使用索引覆盖扫描的优化,还会增加内存、CPU的消耗。获取并缓存额外的列的时候要考虑清楚代价。 4、查询重复的数据:在数据分析的时候可能需要不断地重复执行相同的查询操作,这时候可以将开始的数据缓存起来,需要的时候拿过来用即可。 2.2、MySQL是否在扫描额外的记录 当确定了我们需要的数据之后,就有了三个指标去衡量是否扫描了过多的数据: 3、重构查询的方式 我们是应该选择一个负责的查询还是多个简单的查询? MySQL内部的扫描速度在上百行,但是MySQL返回给客户端的数据就会变慢,所以尽量使用查询比较少的比较好。 分解查询的方法: 3.1、切分查询 可以尝试将大的查询切分为几个小的查询,每个小的查询功能类似,就可以持续执行小的查询。比如我们需要删除大量数据: -- 一次性删除三个月的数据; DELETE FROM messages WHERE created -- 可以根据数据量进行删除; rows_affected=0; do { rows_affected = do_query( "DELETE FROM messages WHERE created < DATE_SUB(NOW(),INTERVAL 3 MONTH) LIMIT 10000" ) } while rows_affected >0 每次删除一万条数据对服务器的负担比较小,注意一点是在删除之后暂停一下再次执行。 3.2、分解关联查询 可以将多表的关联查询拆解成多条查询,其实就是将关联的步骤放在了应用层。示例: 今天的优化小技巧是不是对你有所帮助呢?今日准备是的《SQL基础教程(第2版)》,希望大家在不断成长的时候也不要忘了巩固基础。数据分析优质社群,等你加入哦~ (编辑:百客网 - 百科网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐