当前位置:首页 > 文章列表 > 数据库 > MySQL > 浅析MySQL中导致查询慢的原因有哪些

浅析MySQL中导致查询慢的原因有哪些

来源:SegmentFault 2023-01-26 17:53:16 0浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《浅析MySQL中导致查询慢的原因有哪些》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

一、先了解一下MySQL查询的执行过程

MySQL在查询时,它是由很多子任务组成的,每个子任务都会消耗一定的时间,如果要想优化查询,实际上要优化其子任务,可以消除一些子任务、减少子任务的执行次数、让子任务执行的更快。

MySQL查询的执行过程:从客户端到服务器、然后在服务器进行解析、生成执行计划、执行、返回结果给客户端。

执行是最重要的阶段,包括调用存储引擎检索数据、调用后的数据处理、排序、分组等;

查询需要在不同的地方花费时间,包括网络、CPU计算、生成统计信息、生成执行计划、锁等待等,尤其是向底层存储引擎检索数据的调用操作,这些调用需要在内存操作、CPU操作和内存不足时导致的IO操作上花费时间。根据存储引擎不同,可能还会产生大量的上下文切换以及系统调用。

不必要的额外操作、不必要的重复操作、某些操作执行的太慢都是查询慢的原因,优化查询的目的就是减少和消除这些操作所花费的时间。

二、是否查询了不需要的数据

有些查询会查询很多不需要的数据,查询之后,程序中并未使用,这样不但会给MySQL服务器带来额外的负担,还会增加网络开销,也会消耗应用服务器的CPU和内存资源,简而言之,吃多少拿多少。

千万不要有

  • 服务时间指数据库处理这个查询真正花费的时间;

  • 排队时间指服务器因为等待某些资源而没有真正执行查询的时间,比如等待IO操作、等待行锁。

  • 2、扫描的行数和返回的行数

    较短的行的访问速度更快,内存中的行比磁盘中的行的访问速度要快得多。

    理想情况下扫描的行数和返回的行数是相同的。但这种情况并不多见,比如关联查询的时候,服务器必须扫描更多的行才能得到结果,因此,越多的表关联,性能越低。

    3、扫描的行数和访问类型

    MySQL可以通过多种方式查询并返回结果集,速度从慢到快,扫描的行数由多到少,依次为全表扫描、索引扫描、范围扫描、唯一索引扫描、常数引用。

    最常用的优化方式是为查询增加一个合适的索引,索引可以让MySQL以最高效、扫描行数最少的方式找到需要的记录。

    4、一般可以通过explain的Extra列查看查询的优劣

    一般MySQL能够使用以下三种方式应用where条件,从好到坏依次为:

    1. 在索引中使用where条件过滤不匹配的记录,这是在存储引擎层完成的;

    2. 使用索引覆盖扫描,也就是Extra中出现

      Using index
      ,直接从索引中过滤不需要的记录并返回命中的结果,这是在MySQL服务器层完成的,无须再回表查询记录;
    3. Extra中出现Using where,这是在MySQL服务器层完成的,MySQL需要先从数据表读取记录,然后过滤。

    Extra中出现

    Using where
    时,可以通过如下方式优化:
    1. 使用索引覆盖扫描,把所有需要的列都放到索引中,这样就不用回表查询了;

    2. 改变表结构,比如使用汇总表;

    3. 重写sql,让MySQL优化器能够以更优化的方式执行这个sql;

    今天带大家了解了MySQL、索引、Java、面试、程序员的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

    版本声明
    本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
    阿里MySQL应用实战与性能调优手册惨遭泄漏,GitHub下载量超23K+阿里MySQL应用实战与性能调优手册惨遭泄漏,GitHub下载量超23K+
    上一篇
    阿里MySQL应用实战与性能调优手册惨遭泄漏,GitHub下载量超23K+
    手把手教你借助Calcite框架快速实现一个数据库
    下一篇
    手把手教你借助Calcite框架快速实现一个数据库
    查看更多
    最新文章
    查看更多
    课程推荐
    • 前端进阶之JavaScript设计模式
      前端进阶之JavaScript设计模式
      设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
      542次学习
    • GO语言核心编程课程
      GO语言核心编程课程
      本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
      511次学习
    • 简单聊聊mysql8与网络通信
      简单聊聊mysql8与网络通信
      如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
      498次学习
    • JavaScript正则表达式基础与实战
      JavaScript正则表达式基础与实战
      在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
      487次学习
    • 从零制作响应式网站—Grid布局
      从零制作响应式网站—Grid布局
      本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
      484次学习
    查看更多
    AI推荐
    • AI边界平台:智能对话、写作、画图,一站式解决方案
      边界AI平台
      探索AI边界平台,领先的智能AI对话、写作与画图生成工具。高效便捷,满足多样化需求。立即体验!
      416次使用
    • 讯飞AI大学堂免费AI认证证书:大模型工程师认证,提升您的职场竞争力
      免费AI认证证书
      科大讯飞AI大学堂推出免费大模型工程师认证,助力您掌握AI技能,提升职场竞争力。体系化学习,实战项目,权威认证,助您成为企业级大模型应用人才。
      424次使用
    • 茅茅虫AIGC检测:精准识别AI生成内容,保障学术诚信
      茅茅虫AIGC检测
      茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
      560次使用
    • 赛林匹克平台:科技赛事聚合,赋能AI、算力、量子计算创新
      赛林匹克平台(Challympics)
      探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
      662次使用
    • SEO  笔格AIPPT:AI智能PPT制作,免费生成,高效演示
      笔格AIPPT
      SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
      569次使用
    微信登录更方便
    • 密码登录
    • 注册账号
    登录即同意 用户协议隐私政策
    返回登录
    • 重置密码