加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

九道门|一日一技:MySQL查询优化

发布时间:2023-02-06 13:48:23 所属栏目:MySql教程 来源:
导读:  今天小朱老师为大家准备的小知识点是MySQL查询优化MySQL 查询数据,可以帮助大家提升工作效率,减少繁琐操作,话不多说,下面就一起来学习吧。

  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版)》,希望大家在不断成长的时候也不要忘了巩固基础。数据分析优质社群,等你加入哦~
 
 
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!