查询慢的原因

优化数据访问

一个有趣的现象:如果可能的结果非常大的话,有可能就不用索引来排序了。
实际处理的时候,可能会有优化器对结果产生一些影响。
《高性能MySQL》中说整体数据访问量的阈值是30%,但是实际测试中并没有测出准确值,所以还是要根据实际案例,具体问题具体分析。

思考:下面这个limit怎么通过子查询进行优化?

避免:

1、避免查询不需要的记录
我们常常会误以为mysql会只返回需要的数据,实际上mysql却是先返回全部结果再进行计算,在日常的开发习惯中,经常是先用select语句查询大量的结果,然后获取前面的N行后关闭结果集。
优化方式是在查询后面添加limit

2、避免多表关联时返回全部列

select * from actor inner join film_actor using(actor_id) inner join film using(film_id) where film.title='Academy Dinosaur';select actor.* from actor...;

3、避免总是取出全部列
在公司的企业需求中,禁止使用select *,虽然这种方式能够简化开发,但是会影响查询的性能,所以尽量不要使用

4、避免重复查询相同的数据
如果需要不断的重复执行相同的查询,且每次返回完全相同的数据,因此,基于这样的应用场景,我们可以将这部分数据缓存起来,这样的话能够提高查询效率

执行过程的优化

查询缓存(8版本取消了)

在解析一个查询语句之前,如果查询缓存是打开的,那么mysql会优先检查这个查询是否命中查询缓存中的数据,如果查询恰好命中了查询缓存,那么会在返回结果之前会检查用户权限,如果权限没有问题,那么mysql会跳过所有的阶段,就直接从缓存中拿到结果并返回给客户端

查询优化处理

语法解析器和预处理
解析树:AST Tree

mysql通过关键字将SQL语句进行解析,并生成一颗解析树,mysql解析器将使用mysql语法规则验证和解析查询,例如验证使用使用了错误的关键字或者顺序是否正确等等,预处理器会进一步检查解析树是否合法,例如表名和列名是否存在,是否有歧义,还会验证权限等等

查询优化器

CBO:基于成本的优化
RBO:基于规则的优化

当语法树没有问题之后,相应的要由优化器将其转成执行计划,一条查询语句可以使用非常多的执行方式,最后都可以得到对应的结果,但是不同的执行方式带来的效率是不同的,优化器的最主要目的就是要选择最有效的执行计划

mysql使用的是基于成本的优化器,在优化的时候会尝试预测一个查询使用某种查询计划时候的成本,并选择其中成本最小的一个

last_query_cost查看上一次查询的代价
MySQL中可以通过show status like ‘last_query_cost’ 来查看查上一个查询的代价,而且它是io_cost和cpu_cost的开销总和,它通常也是我们评价一个查询的执行效率的一个常用指标。
(1)它是作为比较各个查询之间的开销的一个依据。
(2)它只能检测比较简单的查询开销,对于包含子查询和union的查询是测试不出来的。
(3)当我们执行查询的时候,MySQL会自动生成一个执行计划,也就是query plan,而且通常有很多种不同的实现方式,它会选择最低的那一个,而这个cost值就是开销最低的那一个。
(4)它对于比较我们的开销是非常有用的,特别是我们有好几种查询方式可选的时候。

关联查询

排序优化

无论如何排序都是一个成本很高的操作,所以从性能的角度出发,应该尽可能避免排序或者尽可能避免对大量数据进行排序。
推荐使用利用索引进行排序,但是当不能使用索引的时候,mysql就需要自己进行排序,如果数据量小则再内存中进行,如果数据量大就需要使用磁盘,mysql中称之为filesort。
如果需要排序的数据量小于排序缓冲区(show variables like ‘%sort_buffer_size%’

MySQL调优(五):MySQL查询优化分析相关推荐

  1. mysql优化零基础_MySQL8数据库 | MySQL调优|MySQL底层原理|MySQL零基础新手教程

    MySQL8数据库安装 一.Windows 环境下安装 Select Operating System: Microsoft Windows B.解压并配置MySQL环境变量 MYSQL_HOME: ...

  2. MySQL调优系列:explain分析SQL的执行计划

    一条SQL的执行计划自我描述 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 大数据代码案例地址: https://github. ...

  3. explain mysql 调优_explain mysql性能优化

    1 使用explain语句去查看分析结果,如 explain select * from test1 where id=1; 会出现: id  selecttype table  type possi ...

  4. 什么叫精通MySQL调优

    MySQL调优对于很多程序员而言,都是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际 ...

  5. 性能优化专题 - MySql 性能优化 - 04 - MySql调优

    目录导航 前言 Undo-log与Redo-log 案例 当前读.快照读 Redo Log的落盘配置 MySQL配置优化 MySQL服务器参数类型 快速定位MySql配置文件 MySQL内存参数配置 ...

  6. 开发人员MySQL调优-实战篇2-让SQL使用索引详解

    2019独角兽企业重金招聘Python工程师标准>>> 建议先看看开发人员MySQL调优-实战篇0 让执行的SQL使用索引 虽然DBA给我们建了很多索引,但没有经验的开发人员往往只看 ...

  7. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  8. MySQL 调优/优化的 101 个建议!

    转载自 MySQL 调优/优化的 101 个建议! MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适 ...

  9. MySQL调优篇:单机数据库如何在高并发场景下健步如飞?

    在当前的IT开发行业中,系统访问量日涨.并发暴增.线上瓶颈等各种性能问题纷涌而至,性能优化成为了现时代中一个炙手可热的名词,无论是在开发.面试过程中,性能优化都是一个常谈常新的话题.而MySQL作为整 ...

  10. MySQL调优是程序员拿高薪的必备技能?

    前言 有一句很有意思的话:现在的世界,得数据者得天下. 可见数据对于我们.对于企业.对于未来发展来说都十分重要. 而想要"得天下",掌握海量数据,那么对存储.读写数据的数据库的要求 ...

最新文章

  1. php鼠标经过显示文本,CSS_HTML和CSS做网页实例教程:鼠标滑过文字改变,关于HTML+CSS的实例效果很多, - phpStudy...
  2. c语言实现循环单链表
  3. C++ 数值与 string 的相互转换
  4. shutdown函数
  5. 我要做 Android 之面笔试
  6. 多线程之生产者与消费者问题
  7. 计算机网络原理学习笔记
  8. Unity的PackageManager面板不能用问题
  9. lpx寒假作业案例3
  10. 计算机网络教程第5版-第1章计算机网络概述
  11. 如何用Deeplink为快应用提供多个快速直达入口
  12. 大一C语言大作业_网吧收费管理系统
  13. PL/SQL 工具远程连接Oracle数据库方法,plsql免安装oracle客户端直接配置oci实战演示
  14. app目前第三方托管平台整理
  15. 读《如何有效阅读一本书:超实用笔记读书法》
  16. CSDN学院专属推荐--从Python小白走向Python工程师你只需要它!
  17. 怎样在PS中使用渐变功能对图片调色?原来还有这样的调色模式!
  18. 2012年数学建模国赛D题(机器人避障问题)优秀论文.doc
  19. OAuth网络协议(转)
  20. ESP32-C3烧录后打印报错invalid header: 0xffffffff【flash_download_tool_3.9.3.exe工具烧录】

热门文章

  1. HDU - 2859 Phalanx(动态规划/哈希表)
  2. Web开发-Django模型层
  3. L1-038. 新世界
  4. 椭圆中心到椭圆切线的距离
  5. HDU4392(反素数强大的模版)
  6. 线段树求区间最大值RMQ(单点更新)
  7. 网狐棋牌游戏平台服务器架构设计分析
  8. Sping+ActiveMQ整合
  9. Java集合框架:总结
  10. 在业务系统中寻求技术含量