[MySQL] SQL优化之性能分析

这篇具有很好参考价值的文章主要介绍了[MySQL] SQL优化之性能分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌈键盘敲烂,年薪30万🌈

[MySQL] SQL优化之性能分析,mysql,mysql,数据库

目录

一、索引优化

1、索引是什么:

2、索引的数据结构:

3、索引种类:

4、sql分析(回表查询)

二、定位慢查询语句

1、慢查询日志

2、profile详情

3、explain执行计划(重点)

4、查看执行频次


 

一、索引优化

1、索引是什么:

通过一些约束,快速查询到相应字段的一种数据结构

索引在sql优化中占有非常重要的地位,因为索引与查询挂钩,查询是我们最常做的一个操作。

2、索引的数据结构:

Hash索引:查询快,但是不支持范围查询,只能精确定位某个数据。

B+树索引:查询较快,支持范围查询,这也是InnoDB存储引擎中默认的索引结构


B+树结构:

多路平衡树,每个节点存放key和指针,指针数量等于key数量+1

[MySQL] SQL优化之性能分析,mysql,mysql,数据库

插播小知识:

B+树与B树,有什么区别,为什么不用二叉树???

B+树没个非叶子结点只存放指针,可以最大限度的降低树的高度,提高查询效率。

所有数据存放在叶子节点,查询稳定而二叉树层次会更深,也会有退化为链表的风险

3、索引种类:

聚簇索引:叶子节点中主键下面挂的是每一行的数据

二级索引:叶子节点中索引值下面挂的是主键id

4、sql分析(回表查询)

现有user表,id为主键,name有唯一约束和唯一索引结构,分析下面sql语句。

-- select * from user where id = 1;

-- select * from user where name = 'zhang';

分析:

①where 后面是id,从主键索引里面查找,找到了id为1的,再看前面select 后面是 * 主键下面包含了这些字段信息,直接返回。

②where 后面是name,并且有唯一索引结构,从该索引查找,找到了姓名为zhang的,同样select * 也是查询所有字段,但是此时name下面只有主键id的值,他要根据id再次查询主键索引,性能低

二、定位慢查询语句

1、慢查询日志

  • mysql带有慢查询日志,该日志会记录超过指定时间的sql语句,

注意:

慢查询日志默认为不开启,开启之后默认指定时间为10s。

可通过修改配置文件来设置这两参数。

  • 修改mysql的配置文件 

[MySQL] SQL优化之性能分析,mysql,mysql,数据库

缺点:

有些sql在规定的时间之内,但是查询花了9.9秒,并且性能很低,慢查询日志无法记录这样的sql我们也就无法优化.

2、profile详情

  • show profiles 查看sql语句的执行时间

[MySQL] SQL优化之性能分析,mysql,mysql,数据库

  • show profile for query query_id; 查看指定语句的执行时间

[MySQL] SQL优化之性能分析,mysql,mysql,数据库

3、explain执行计划(重点)

  • explain执行计划:他记录了sql查询的一些详细信息

例如:查询部门和员工信息,

控制台返回这么一张表,我们重点关注这5个字段。

[MySQL] SQL优化之性能分析,mysql,mysql,数据库

type:

  • 表示访问表的方式,是性能分析中重要的一个指标。常见的取值有:
    • ALL:全表扫描。
    • index:通过索引扫描。
    • range:通过索引范围扫描。
    • ref:非唯一性索引扫描。
    • eq_ref:唯一性索引扫描。
    • const:单表中最多有一个匹配行的情况。

反应查询效率 从高到底分别是NULL->system->const->eq_ref->ref->range->index->all

all性能最差,也就是它是全表扫描,没有使用索引,NULL 只有像select 'A' 这样的没有查表才会这样,所以开发中我们尽量优化到system 或者const或者ref级别。

possible_keys:

  • 可能使用的索引,但不一定用到

key:

  • 使用的索引

key_len:

  • 使用索引的长度(字节为单位)

Extra:

  • 包含有关查询的额外信息,可能包括:
    • Using index:表示查询使用了覆盖索引。
    • Using where:表示 MySQL 会在存储引擎层使用 WHERE 条件过滤行。
    • Using temporary:表示查询需要创建临时表。
    • Using filesort:表示 MySQL 会对结果使用文件排序。

4、查看执行频次

[MySQL] SQL优化之性能分析,mysql,mysql,数据库 文章来源地址https://www.toymoban.com/news/detail-755810.html

到了这里,关于[MySQL] SQL优化之性能分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MYSQL高级】Mysql的SQL性能分析【借助EXPLAIN分析】

    要说sql有问题,需要拿出证据,因此需要性能分析 Mysql中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(它认为最优的数据检索方式,不见得是DBA认为是最优的,这部分最耗费时间,

    2024年02月15日
    浏览(62)
  • 【MySQL进阶】SQL性能分析

    MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信 息。通过如下指令,可以查看当前数据库的 INSERT 、 UPDATE 、 DELETE 、 SELECT 的访问频次: Com_delete: 删除次数    Com_insert: 插入次数 Com_select: 查询次数   Com_update: 更新次数 我们可以在当前数据库

    2024年02月07日
    浏览(56)
  • Mysql高级2-SQL性能分析

    MySQL客户端 连接成功后,通过show [session | global] status 命令可以提供服务器状态信息,通过如下指令,可以查看当前数据库的insert,update,dalete,select的访问频次 说明1:上面的数据库被执行查询4次   慢查询日志记录了所有执行时间超过指定参数(long_query_time 单位:秒,默认

    2024年02月15日
    浏览(56)
  • Mysql的SQL性能分析【借助EXPLAIN分析】

    要说sql有问题,需要拿出证据,因此需要性能分析 Mysql中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(它认为最优的数据检索方式,不见得是DBA认为是最优的,这部分最耗费时间,

    2024年02月12日
    浏览(71)
  • mysql-sql性能分析工具

            MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次: -- session 是查看当前会话 ; -- global 是查询全局数据 ; SHOW GLOBAL STATUS LIKE \\\'Com_\\\'; 慢查询日志记录了所有执

    2024年02月12日
    浏览(49)
  • 【性能优化】MySQL百万数据深度分页优化思路分析

            一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行 分页查看 , 最常见的一种就是根据日期进行筛选 。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万、千万条数据只是时间问题。 一、数

    2024年02月15日
    浏览(48)
  • Mysql8.0.x新特性及其性能优化分析

    8.0.17及之后的版本更新的内容比较多,推荐使用8.0.17及之后的版本。 参考文档: 添加弃用和删除的特性: https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html 添加弃用和删除的参数: https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.ht ml Mysql8 InnoDB 架构: https://dev.mysql.com/doc/refm

    2024年04月26日
    浏览(28)
  • MySQL进阶篇:索引(概述,结构,分类,语法,SQL性能分析,索引使用,设计原则)

    索引(index)是帮助MysQL 高效获取数据的数据结构 ( 有序 )。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 优缺点: MySQL的索引是在存储

    2024年01月20日
    浏览(48)
  • 数据库监控与调优【六】—— SQL性能分析

    TIPS 本文基于MySQL 8.0 EXPLAIN分析SQL它不香吗?如何更加细致分析SQL的性能呢?深入SQL内部分析性能! SHOW PROFILE:简单、方便,已废弃 INFORMATION_SCHEMA.PROFILING:和SHOW PROFILE本质是一样的,已废弃 PERFORMANCE_SCHEMA:MYSQL建议的方式,未来之光,但目前来说使用不够方便 先要做一定的

    2024年02月11日
    浏览(57)
  • MySQL性能分析常见方式

    1、慢查询SQL日志 查看慢SQL是否开启 执行下面的命令开启慢查询日志 修改慢查询阈值 查看设置的慢查询时间 查看慢查询日志位置 查看慢查询数目 mysqldumpslow MySQL提供了的日志分析工具,可以帮助我们分析日志,查找、分析SQL。 删除慢SQL日志 最后要关闭慢SQL日志,不然可能

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包