MySQL的优化手段

news2024/9/30 15:17:22

如何使用SQL性能分析工具来查看数据库的整体执行情况

特别是针对MySQL数据库。通过这些命令,可以了解数据库中各种SQL语句(SELECT、INSERT、DELETE、UPDATE)的执行频率。

  1. show global status like 'com_select'; —— 查看SELECT语句的执行次数。
  2. show global status like 'com_insert'; —— 查看INSERT语句的执行次数。
  3. show global status like 'com_delete'; —— 查看DELETE语句的执行次数。
  4. show global status like 'com_update'; —— 查看UPDATE语句的执行次数。
  5. show global status like 'com_%'; —— 使用通配符查看其他SQL语句的执行次数。

这些命令返回的是MySQL服务器当前统计的各类SQL语句执行的次数,帮助我们分析数据库的使用模式。例如:

  • 如果 com_select 的次数很高,说明数据库主要用于读操作。
  • 如果 com_insertcom_deletecom_update 的次数很高,说明数据库主要用于写操作。

慢查询:

1. 开启慢查询日志

在 MySQL 或 MariaDB 中,慢查询日志通常是默认关闭的,可以通过以下步骤开启:

方法一:临时开启(仅当前会话生效)

SET GLOBAL slow_query_log = 'ON';

方法二:永久开启(修改配置文件)

  1. 打开 MySQL 的配置文件 my.cnf(通常位于 /etc/mysql//etc/ 下)。
  2. 找到 [mysqld] 部分,添加或修改以下内容:
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log   # 自定义日志存放路径
    long_query_time = 1  # 设定慢查询时间阈值为 1 秒
    
  3. 重启 MySQL 服务:
    systemctl restart mysql # 或 service mysql restart

2. 查看慢查询日志

在命令行使用以下命令查看慢查询日志内容:

cat /var/log/mysql/slow.log

或者通过 SQL 查询来检查慢查询数量:

SHOW GLOBAL STATUS LIKE 'Slow_queries';

3. 分析慢查询日志

你可以使用 mysqldumpslow 命令分析慢查询日志文件:

mysqldumpslow /var/log/mysql/slow.log

SHOW PROFILES:


/*
 查看当前数据库是否支持profile操作
 */
select @@have_profiling;

/*
 査看profiling开关是否开启
 */
 select @@profiling;

/*
通过以下方式把profiling开关打开
 */
 set profiling = 1;

/*
 show profiles;
通过它可以查看执行过的所有的select语句的耗时情况。(是所有命令语句的耗时情况)
 */

 /*
  查看某个SQL语句语句在执行过程中,每个阶段的耗时情况
  show profile for query 19;

  也可以查看整个执行过程当中cpu的占用情况
  show profile cpu for query 19;
  */

explain:

1. 基本使用

你可以在任何 SELECT 查询之前加上 EXPLAIN 来查看其执行计划。例如:

EXPLAIN SELECT * FROM users WHERE id = 1;

2. EXPLAIN 的输出字段

执行 EXPLAIN 后,MySQL 会返回一个表格,包含关于查询执行计划的详细信息。以下是常见字段的解释:

id查询的标识符,表示查询的执行顺序。通常简单查询中为1,复杂的查询(如子查询或联合查询)会有多个ID。(ID越大优先级越高,id相同则遵循自上而下的顺序执行)
select_type查询的类型,例如 SIMPLE(简单查询,没有子查询或联合查询)PRIMARY(主查询),SUBQUERY(子查询),DERIVED(派生表,如 FROM 子查询)。
table被访问的表或派生表的名称。
partitions表明是否查询特定的分区表。如果没有分区,则显示 NULL
type表示连接类型,表明 MySQL 如何访问表。常见值从最优到最差包括:systemconsteq_refrefrangeindexALL(全表扫描)。
possible_keysMySQL 在执行查询时可能使用的索引。显示可以用于查询的所有索引。
key实际用于执行查询的索引。如果 NULL,则表示未使用索引。
key_len使用的索引的长度(字节数)。表示 MySQL 为该查询中的某列使用了多少部分的索引。
ref表示列与索引之间的匹配条件,通常是使用的常量或列名。
rows预计需要扫描的行数,表明 MySQL 估计为了满足查询条件需要读取多少行。
filtered表示行过滤后的百分比,显示满足 WHERE 条件的行占总行数的百分比。
Extra额外信息,可能有助于了解查询的执行过程。常见值有:Using index(全索引扫描),Using where(在获取数据后再应用 WHERE 条件),Using temporary(使用临时表)等。

3. 重要字段详解

1. id

id 字段显示了执行计划中每一步的顺序。较大的 id 表示 MySQL 会先执行它。在子查询和联合查询中,id 会显示多个值:

  • 相同 id:表示这些操作是按顺序执行的。
  • 不同 id:较大的 id 会先执行。

2. select_type

select_type 字段告诉你查询的类型,主要有以下几种:

  • SIMPLE:简单的查询,不包含子查询或联合查询。
  • PRIMARY:最外层查询。
  • SUBQUERY:子查询中的查询。
  • DERIVED:派生表,通常是子查询 FROM 中的结果集。
  • UNION:表示查询中的联合操作。

3. type

type 是一个非常重要的字段,它表明了 MySQL 在查询中是如何访问数据的,查询的效率往往与 type 的值直接相关。常见的 type 值包括:

  • ALL:全表扫描,这是效率最低的方式,通常应尽量避免。
  • index全索引扫描,这虽然比全表扫描快,但效率仍然较低。
  • range:使用索引的范围查询,表示 MySQL 只扫描符合条件的一部分数据行。
  • ref:表示使用非唯一索引进行匹配
  • eq_ref:对于主键或唯一索引的扫描,是非常高效的查询方式。
  • const/system:当查询只涉及到常量时使用,比如 WHERE id = 1,系统只需要读取一次便能返回结果,是效率最高的方式。

4. keykey_len

  • key:显示 MySQL 实际使用的索引。如果 keyNULL,表示没有使用任何索引。
  • key_len:表示 MySQL 用于索引的字节数。通常,key_len 越小,表示查询越高效。

5. rows

rows 是 MySQL 估计需要扫描的行数,越少越好。这是 MySQL 根据表的统计信息估算出的数值,它能帮助你判断查询的开销。

6. Extra

Extra 字段显示查询执行的额外信息,以下是常见的值:

  • Using where:表示 MySQL 会在获取数据后再应用 WHERE 条件过滤数据,这种情况下可能无法完全利用索引。
  • Using index:表示查询只使用索引来获取数据,而不需要访问实际的表。这是一个好的标志,通常意味着查询性能较好。
  • Using temporary:表示 MySQL 在查询过程中需要创建临时表,这通常会影响性能。
  • Using filesort:表示 MySQL 需要对结果进行排序,而不是使用索引排序,这是一个性能瓶颈。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PC流量转移动流量,提升网盘拉新收益

首先,以夸克网盘举例,请看收益明细表。 做网盘拉新,要有高收益,还得靠移动拉新和转存,PC端拉新就2块钱一个人,太少了。 但是,除抖音、小红书这种主打移动端的自媒体平台外。 借助百度和Bing等…

游戏找不到xinput1_3.dll的原因及解决方法

1. xinput1_3.dll 基本信息 1.1 文件名 xinput1_3.dll 是一个动态链接库(DLL)文件,它属于 Microsoft DirectX for Windows 的一部分。这个文件主要负责处理与 Xbox 360 控制器和其他兼容 XInput 标准的游戏手柄相关的输入信号,确…

这款工具在手,前端开发轻松搞定!

这款工具在手,前端开发轻松搞定! 引言 在之前的一篇文章中,已经给大家分享了一款AI助手。尽管该助手能够生成前端代码,但遗憾的是缺少了实时预览的功能。而现在,这一缺憾已经被弥补——你只需要描述你的设计想法&…

土体沉降计在沉降监测中起到什么作用

在土木工程和地质工程领域,对土体的沉降和变形进行精确监测是确保工程安全和质量的关键环节。而土体沉降计作为一种用于测量土体沉降和变形的仪器,在这一过程中发挥了重要的作用。本文将从土体沉降计的工作原理、优点及其在沉降监测中的具体应用等方面进…

基于Spring Boot的旅游网站

目录 前言 功能设计 系统实现 获取源码 博主主页:百成Java 往期系列:Spring Boot、SSM、JavaWeb、python、小程序 前言 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势&#xff0c…

面试中考察栈和队列的经典算法题

💝💝💝如果你对顺序表的概念与理解还存在疑惑,欢迎观看我之前的作品👉【栈和列队详解】 上篇文章👉 【面试中顺序表常考的十大题目解析】 目录 💯前言 💯栈相关题目 ⭐有效的括号…

WebSocket 2024/9/30

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 与HTTP协议的区别 实现

深入解析Excel文件格式:.xls与.xlsx的差异与应用指南

在当今的数据处理和办公自动化领域,Microsoft Excel 无疑是一款极为重要的工具。 它不仅广泛应用于日常的数据录入、计算和图表制作,而且也是数据分析、财务建模等专业 领域不可或缺的软件。Excel 的文件格式经历了多个版本的迭代,其中 .xl…

YOLOv11改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制

前言 这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。 文章目录 前言一、为…

uniapp生物识别示例(人脸识别、指纹识别)

准备工作&#xff1a; mainfest.json设置勾选&#xff1a; 勾选完成后打 App自定义调试基座测试包 示例代码&#xff1a; <template><view class"content"><button v-if"supportSoterAuthenticationArray.includes(facial)" click"…

QT使用qss控制样式实现动态换肤

文章目录 设计QSS样式表动态加载QSS文件主函数调用QT提供了一种非常灵活的方式来使用QSS(Qt Style Sheet,类似于 CSS 的样式表),实现界面的动态换肤功能。QSS可以改变Qt应用程序中几乎所有可视组件的外观,包括颜色、字体、边框等。下面介绍一下如何通过QSS实现动态换肤。 设…

大模型时代的企业AI发展趋势浅析

在当前技术飞速进步的时代背景下&#xff0c;生成式人工智能与大型模型正逐渐成为推动产业变革的关键力量。随着人工智能技术的持续成熟与普及&#xff0c;其应用范围已从个人领域拓展至企业层面&#xff0c;广泛渗透至各个行业。那么&#xff0c;这些新兴技术究竟将为产业界带…

手把手教你使用YOLOv11训练自己数据集(含环境搭建 、数据集查找、模型训练)

一、前言 本文内含YOLOv11网络结构图 训练教程 推理教程 数据集获取等有关YOLOv11的内容&#xff01; 官方代码地址&#xff1a;https://github.com/ultralytics/ultralytics/tree/main/ultralytics/cfg/models/11 二、整体网络结构图 三、环境搭建 项目环境如下&#xf…

天融信运维安全审计系统 synRequest 远程命令执行漏洞复现

0x01 产品描述&#xff1a; 天融信运维安全审计系统TopSAG是基于自主知识产权NGTOS安全操作系统平台和多年网络安全防护经验积累研发而成&#xff0c;系统以4A管理理念为基础、安全代理为核心&#xff0c;在运维管理领域持续创新&#xff0c;为客户提供事前预防、事中监控、事后…

一文了解构建工具——Maven与Gradle的区别

目录 一、Maven和Gradle是什么&#xff1f; 构建工具介绍 Maven介绍 Gradle介绍 二、使用时的区别&#xff1a; 1、新建项目 Maven&#xff1a; Gradle&#xff1a; 2、配置项目 Maven&#xff1a; Gradle&#xff1a; 3、构建项目——生成项目的jar包 Gradle&…

Linux之实战命令20:split应用实例(五十四)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

【C++】692.前K个高频单词

692. 前K个高频单词 - 力扣&#xff08;LeetCode&#xff09; 思路分析&#xff1a; 使用map统计单词的次数。map是按单词从小到大排序的。对单词再按照次数从大到小排序。有两种方法&#xff1a; 将pair<string&#xff0c;int>键值对放到vector中&#xff0c;用sort排序…

【Linux系统编程】第二十五弹---Shell编程入门:打造一个简易版Shell

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、简易的shell 1.1、输出一个命令行 1.2、获取用户命令字符串 1.3、命令行字符串分割 1.4、检查命令是否是内建命令 1.5、…

LeetCode24. 两两交换链表中的节点(2024秋季每日一题 32)

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,…

Llama微调以及Ollama部署

1 Llama微调 在基础模型的基础上&#xff0c;通过一些特定的数据集&#xff0c;将具有特定功能加在原有的模型上。 1.1 效果对比 特定数据集 未使用微调的基础模型的回答 使用微调后的回答 1.2 基础模型 基础大模型我选择Mistral-7B-v0.3-Chinese-Chat-uncensored&#x…