返回顶部
首页 > 资讯 > 数据库 >MYSQL | SQL性能 | 有效分析的技巧和方法
  • 740
分享到

MYSQL | SQL性能 | 有效分析的技巧和方法

mysqlsqlandroid 2023-09-15 14:09:10 740人浏览 薄情痞子
摘要

文章目录 前言一、查看库SQL类型频率二、找出慢SQL1、慢查询日志查看是否开启开启慢日志1.找到Mysql配置文件2.修改配置文件3.查看慢日志路径 2、查看每条SQL的耗时开

文章目录

前言

  在sql性能优化过程中,经常遇到的问题包括查询响应时间过长、数据库负载过高、不适当的索引策略以及查询语句的复杂性等。

  SQL性能分析可以帮助我们发现潜在的性能问题,定位瓶颈所在,并提供相应的优化策略。通过深入分析SQL查询的执行计划、监控关键性能指标以及使用专业的性能分析工具,我们可以及时优化和改进数据库应用程序的性能。



一、查看库SQL类型频率


  通过指定DQL语句(Data Query Language),可以查看某个数据库所有增删改查的次数。从而分析这个数据库在增删改查的操作中,哪几种操作的比例大。

  使用以下命令进行查询:Com后面跟了7个下划线,表示查找Com后面跟了7个字符的属性和属性值

show global status like 'Com_______';   

  下图数据可以看出,select操作明显是最多的,其次是更新操作。


在这里插入图片描述



二、找出慢SQL


  慢SQL对数据库性能、应用程序响应时间和系统可用性都会产生很大影响,找出慢SQL是优化和改善数据库性能的开始。

1、慢查询日志

  定位哪些sql语句执行效率低(默认超过10秒),会自动存储到日志中,方便分析。

查看是否开启

  慢查询日志是默认关闭的,查看日志前要检查Mysql是否启用:

SHOW VARIABLES LIKE 'slow_query_log';

在这里插入图片描述


注意:
要执行上述查询,你至少需要具有以下权限之一:

  • PROCESS:允许查看正在运行的进程。
  • SUPER:允许执行高级操作,包括查看和更改服务器变量。
  • SELECT:允许执行SHOW VARIABLES查询。

开启慢日志

  先说为什么mysql默认不开启慢查询日志,想必是有开发者的考量。开启日志后会造成的影响:

  • 性能开销:记录每个查询的执行时间等信息需要额外的系统资源,包括磁盘io和CPU时间。对于高负载的生产环境,可能会对数据库性能产生显著的影响。

  • 磁盘空间消耗:日志不加管理会占用大量的磁盘空间,需要定期进行管理和维护。

  我们可以手动启用慢查询日志,并根据实际需求进行配置和管理。

1.找到Mysql配置文件

  需要进到服务器修改配置文件,通常位置是:

linux:/etc/mysql/my.cnf
windows:C:\ProgramData\MySQL\MySQL Server X.X\my.ini

2.修改配置文件

  进入配置文件,输入以下命令查找指定配置

/[mysqld]

  在[mysqld]部分中添加或修改以下行(如果已存在则修改):

slow_query_log = 1  // 启用慢查询日志long_query_time = 2  // 定义查询执行时间的阈值,单位为秒。这里设置为2秒,可以根据需要进行调整。

  修改完毕后保存并关闭配置文件,重启MySQL服务,以使更改生效。

3.查看慢日志路径

SHOW VARIABLES LIKE 'slow_query_log_file';

在这里插入图片描述



2、查看每条SQL的耗时

  show profiles命令是MySQL中的一个诊断命令,用于显示执行过的语句或连接的性能分析信息。可以获取有关特定查询或连接的详细性能统计数据,以便进行性能分析和优化。

  show profiles命令显示的是当前会话(当前数据库连接)中最近执行的SQL语句的性能分析信息。每次执行SQL语句后,相关的性能分析信息会被记录并保留在当前会话中,直到会话结束或重新启动。

开启profiles

  profiling默认是关闭的,可以通过set语句开启

SET profiling=1;##查看是否开启SELECT @@have_profiling;

操作命令

  执行一系列的业务sql的操作,然后通过以下命令查看执行耗时:

1. 查看每一条sql的耗时基本情况

show profiles;

在这里插入图片描述

2. 查看指定Query_ID的SQL语句各个阶段的耗时

show profile for query xxxxx;

在这里插入图片描述

3. 查看指定Query_ID的SQL语句CPU情况

show profile cpu for query xxxxx;

在这里插入图片描述




三、查询SQL详细分析-explain

  在查询语句前加上关键字explain,就可以监测到该语句执行过程中表的连接情况和顺序、是否用到了索引等信息。例如:

## 专门找了个复杂点的SQL举例explain select orguser.organization_name,orguser.id organization_id ,count(*) allnum      from tid_alarm_detail ad      right join (        select org.organization_name,org.id,user_id        from tc_organization_user        right join(            select  SUBSTRING(organization_name,5,3) organization_name ,id            from tc_organization            WHERE organization_name like '_年级%'  and organization_name!='四年级(14期)' and is_delete =0            uNIOn            select SUBSTRING(organization_name,1,3),id            from tc_organization            WHERE organization_name like '__期___' and is_delete=0        )org        on tc_organization_user.organization_id=org.id        WHERE is_delete=0      )orguser     on ad.user_jifen_id = orguser.user_id and ad.orgazition=orguser.id      where is_delete=0      and remark is not null      AND  create_time like (SELECT CONCAT(DATE_FORMAT(NOW(), '%Y-%m'),"%"))    GROUP BY organization_name

  查询结果如下:
在这里插入图片描述

explain命令输出列详解

  • id: 表示查找中子句或表的顺序(id值越大越先执行;id相同的时候执行顺序从上到下)
  • select_type: 查询的类型,例如简单查询、子查询、联合查询等。
    • simple:简单表,没有表连接和子查询
    • primary:主查询,即外层的查询
    • union:union中的第二个或后面的查询
    • subquery:select、where之后的子查询
  • type:表示连接类型,性能由好到差:null、system、const、eq_ref、range、index、all
    • ALL:全表扫描,需要遍历整个表。
    • index:索引扫描,通过遍历索引树来获取数据。
    • range:范围扫描,通过索引根据范围条件来获取数据。
    • ref:基于非唯一索引的等值查询。
    • eq_ref:基于唯一索引的等值查询。
    • const:基于常量条件的查询,通常用于只返回一行结果的查询。
    • system:基于系统表的查询,通常只有一行结果。
  • possible_keys: 可能用到的索引,可以有多个
  • key: 实际使用的索引(mysql自己选,也可以人为指定)
  • key_len: 使用的索引的长度。
  • ref: 表之间的连接条件。
  • rows: 估计的要扫描的行数。
  • filtered:返回结果的行数占扫描行数的百分比,越高表示命中率越大,越好。
  • Extra:其他附加信息,如使用临时表、排序等,很多信息都是和索引相关的。
    • Using index:表示查询使用了覆盖索引,即查询所需的数据可以直接从索引中获取,这样的结果是最好的。
    • Using where:表示查询使用了WHERE子句进行筛选,即在检索数据之后,MySQL还需要进一步使用WHERE条件进行过滤。
    • Using temporary:表示查询使用了临时表来完成某些操作,例如排序或分组操作。这可能会增加额外的内存和磁盘开销。
    • Using filesort:表示查询使用了文件排序操作,即无法利用索引的顺序进行排序,需要将结果存储在临时文件中进行排序。
    • Using index condition:表示查询使用了索引条件进行筛选,即通过索引来过滤数据而不需要访问实际的数据行。
    • Using index for group-by:表示查询使用了索引来执行GROUP BY操作,从而避免了额外的排序操作。
    • Using index for distinct:表示查询使用了索引来执行DISTINCT操作,从而避免了额外的排序和去重操作。
    • Using index for order by:表示查询使用了索引来执行ORDER BY操作,从而避免了额外的排序操作。
    • Using index for merge:表示查询使用了索引来执行合并操作,例如多个子查询的结果合并。
    • Using sort_union():表示查询使用了排序合并算法进行合并操作。

来源地址:https://blog.csdn.net/CharmaineXia/article/details/131572097

您可能感兴趣的文档:

--结束END--

本文标题: MYSQL | SQL性能 | 有效分析的技巧和方法

本文链接: https://lsjlt.com/news/408736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MYSQL | SQL性能 | 有效分析的技巧和方法
    文章目录 前言一、查看库SQL类型频率二、找出慢SQL1、慢查询日志查看是否开启开启慢日志1.找到Mysql配置文件2.修改配置文件3.查看慢日志路径 2、查看每条SQL的耗时开...
    99+
    2023-09-15
    mysql sql android
  • PHP 函数的性能分析和优化技巧
    使用 php 函数性能分析和优化技巧可显着提高应用程序性能。分析方法包括使用 xdebug 扩展、tideways 工具和进行微基准化测试。优化措施包括消除瓶颈、减少函数调用、使用高效的...
    99+
    2024-04-14
    性能 php composer
  • 有效查询MySQL表中重复数据的方法和技巧分享
    目录方法一:使用COUNT()函数查询重复行方法二:使用DISTINCT关键字查询重复行方法三:使用自连接查询结论方法一:使用COUNT()函数查询重复行 COUNT()函数是mysql中常用的聚合函数之一,它可以用于计...
    99+
    2023-10-12
    有效查询MySQL表中重复数据 查询MySQL重复数据 MySQL重复数据
  • Golang函数性能分析的实用技巧
    在 golang 中分析函数性能至关重要,可以通过以下方法进行:使用 pprof 工具生成剖析报告,以便分析 cpu 和内存使用情况。利用 go test 的内置基准测试工具测量函数性能...
    99+
    2024-04-12
    golang 性能分析
  • 提高开发效率和性能的Vue技巧有哪些
    本篇内容主要讲解“提高开发效率和性能的Vue技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“提高开发效率和性能的Vue技巧有哪些”吧!1. 巧用$attrs和$listeners$att...
    99+
    2023-07-02
  • mysql性能调优的技巧有哪些
    下面是一些常用的 MySQL 性能调优技巧: 使用索引:为经常使用的列创建索引,可以加快查询速度。 优化查询语句:避免使用全表扫描...
    99+
    2024-02-29
    mysql
  • 优化pandas数据分析的技巧和方法
    提高数据分析效率的pandas技巧与窍门 引言 在现代数据分析领域,pandas是一种非常广泛使用的Python库。它提供了高效、灵活和丰富的数据结构和数据处理工具,使得数据分析变得更加简单和高效。然而,要想真正发挥pandas...
    99+
    2024-01-13
    数据清洗 数据聚合 数据转换
  • 优化网站性能的关键方法和技巧
    提升网站性能的关键策略与技巧 摘要:随着互联网的快速发展,网站用户对于网页访问速度的要求也越来越高。本文将介绍一些关键策略与技巧,帮助网站提升性能,提高用户体验。 一、压缩文件和图片文件和图片的大小直接影响网页加载的速度。因此,...
    99+
    2024-02-03
    - 缓存优化 - 图片压缩 - 前端优化 异步加载 延迟加载
  • SQL Server和MySQL性能调优:最佳实践与关键技巧。
    SQL Server和MySQL性能调优:最佳实践与关键技巧摘要:本文将介绍SQL Server和MySQL两个常见的关系型数据库系统的性能调优方法,并提供一些最佳实践和关键技巧,以帮助开发人员和数据库管理员提高数据库系统的性能和效率。引言...
    99+
    2023-10-22
    性能调优 SQL优化 关键技巧
  • 浅析Java 转 HTML 的方法和技巧
    Java 是一种面向对象的编程语言,广泛应用于各种企业应用程序的开发中。而 HTML 则是一种标记性语言,用于创建网页。在实际开发中,将 Java 代码转换为 HTML 页面是一个非常实用的需求。本文将介绍 Java 转 HTML 的方法和...
    99+
    2023-05-14
  • Java JNDI 性能优化技巧:如何提高 Java JNDI 的性能和效率
    1. 使用连接池 连接池是优化 Java JNDI 性能的有效方法之一。连接池通过预先创建和维护一定数量的数据库连接,以便应用程序随时使用,从而减少了创建新连接的开销。 // 创建连接池 ConnectionPool pool = ne...
    99+
    2024-02-24
    Java JNDI 性能优化 连接池 缓存 线程安全性
  • 常用的JavaScript方法和技巧分享
    这篇文章主要讲解了“常用的JavaScript方法和技巧分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的JavaScript方法和技巧分享”吧!常用...
    99+
    2024-04-02
  • MySQL数据库性能优化的六大技巧分享
    本篇内容主要讲解“MySQL数据库性能优化的六大技巧分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库性能优化的六大技巧分享”吧!1.存储引擎的...
    99+
    2024-04-02
  • 揭示提升Web网站性能的有效优化技巧
    高效优化web网站性能的秘诀揭秘 随着互联网的普及和发展,web网站的性能优化越来越受到重视。一个高效优化的web网站可以提供更好的用户体验,提升用户留存率和转化率,同时还可以减少服务器负载和网络带宽的消耗。那么,究竟有哪些秘诀...
    99+
    2024-02-03
    缓存 压缩 异步 异步加载 延迟加载 b网
  • PHP 防抖技术:提升系统性能的有效方法
    摘要:在Web开发中,性能优化是一项非常重要的任务。PHP防抖技术可以减少不必要的请求,提高系统的性能和响应速度。本文将介绍PHP防抖的原理,并提供具体的代码示例来帮助读者实现和应用这一技术。引言随着互联网的快速发展,众多的网站和应用程序面...
    99+
    2023-10-21
    系统性能 有效方法 防抖技术
  • 学习Go语言网络编程的有效方法和技巧
    从零开始学习Go语言网络编程的方法与技巧,需要具体代码示例 近年来,Go语言在网络编程领域中展现出了强大的能力,成为了许多开发者的首选语言。Go语言以其高效的并发模型、简洁的语法和出色的性能,尤其适用于构建高...
    99+
    2024-01-30
    Go语言 网络编程 方法与技巧 并发请求 标准库
  • 优化网站性能的有效方法和策略
    随着互联网的普及和发展,网站已经成为企业宣传和营销的重要渠道之一。然而,随着网站访问量的不断增加,网站性能的问题也逐渐暴露出来。网站打开速度慢、页面加载时间长等问题不仅影响用户体验,也会导致流量流失和转化率下降。为了提升网站性能...
    99+
    2024-02-02
    策略 网站性能 有效方法 延迟加载
  • 使用 ASP 运算符提升 SQL 性能的技巧和窍门
    1. 避免隐式转换 隐式转换会导致不必要的类型转换,从而降低性能。使用显式转换操作符(例如 CONVERT、CAST)将数据强制转换为所需类型,以避免隐式转换。 2. 使用算术运算符 算术运算符(例如 +, -, *, /)可以用于快速执...
    99+
    2024-04-02
  • MySQL SQL性能分析之慢查询日志、explain使用的方法是什么
    本篇内容介绍了“MySQL SQL性能分析之慢查询日志、explain使用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况...
    99+
    2023-04-19
    mysql sql explain
  • C#中常见的性能优化技巧及方法
    C#中常见的性能优化技巧及方法导言:性能是软件开发中一个非常重要的指标,优化代码以提升系统的性能是每个开发者的必备技能。本文将介绍一些在C#中常见的性能优化技巧和方法,并配以具体的代码示例,帮助读者更好地理解和应用。一、避免频繁的对象创建和...
    99+
    2023-10-22
    缓存 多线程 数据压缩
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作