当前位置: 首页 > article >正文

MySQL强化关键_018_MySQL 优化手段及性能分析工具

目  录

一、优化手段

二、SQL 性能分析工具

1.查看数据库整体情况

(1)语法格式

(2)说明

2.慢查询日志 

(1)说明

(2)开启慢查询日志功能

(3)实例 

 3.show profiles

(1)语法格式

(2)实例

4.explain

(1)id

(2)select_type

(3)type

(4)possible_keys

(5)key

(6)key_len

(7)rows

(8)Extra


一、优化手段

        MySQL 优化手段包括但不限于:

  1. SQL 查询优化:成本最低,通过优化查询语句、适当添加索引等方式进行;
  2. 数据库表结构优化:通过规范化设计、优化索引和数据类型等方式进行库表结构优化,需要对数据库结构进行调整和改进;
  3. 系统配置优化:根据硬件和操作系统的特点,调整最大连接数、内存管理、IO调度等参数;
  4. 硬件优化:成本较高,升级硬盘、增加内存容量、升级处理器等硬件方面。

二、SQL 性能分析工具

1.查看数据库整体情况

(1)语法格式

show global status like 'Com_select';show global status like 'Com_insert';show global status like 'Com_update';show global status like 'Com_delete';show global status like 'Com_______';


(2)说明

  1. 这些结果反映了从 MySQL 服务器启动到当前时刻,所有 SQL 执行总数;
  2. 对于 MySQL 性能优化而言,通过查看【Com_select】的值可以了解 SELECT 查询在整个 MySQL 服务期间所占比例;
  3. 若【Com_select】值较高,表示该数据库是读密集型数据库;
  4. 若【Com_select】值较低,同时【Com_insert】、【Com_update】、【Com_delete】值较高,表示该数据库是写密集型数据库。

2.慢查询日志 

(1)说明

  1. 慢查询日志可以将查询较慢的 DQL 语句记录下来,便于定位调优位置;
  2. 慢查询日志默认关闭,修改 MySQL 安装根目录下的 my.ini 文件开启慢查询日志功能;
  3. 查看慢查询日志是否开启:【show variables like 'slow_query_log';】;


(2)开启慢查询日志功能

  1. 【slow_query_log=1】:表示开启慢查询日志功能;
  2. 【long_query_time=3】:表示只要 SELECT 语句执行耗时超过 3 秒就将其记录日志;
  3. 修改完 my.ini 需要重启 MySQL 服务;
  4. 慢查询日志默认存储在【[ MySQL 安装根目录下 ]\data\[ 计算机名称 ]-slow.log】;
  5. 查看计算机名称:在 dos 命令窗口输入【hostname】。

 


(3)实例 

# 为演示慢查询日志记录,先创建一个数据库表
drop table if exists test_log;create table test_log(id int
);# 插入数据
insert into test_log values(1), (2);# 借助 sleep 使查询时间超过设定值 3
select id, sleep(5) from test_log;

 


 3.show profiles

        可以查看一条 SQL 语句在执行过程中具体耗时情况。

(1)语法格式

# 查看当前数据库是否支持 profile 操作
select @@have_profiling;# 查看 profiling 是否开启(Navicat for MySQL 默认开启)
select @@profiling;# 开启 profiling
set profiling=1;# 查看执行过所有语句耗时情况
show profiles;


(2)实例

select * from users;
select name from users;
select * from users where gender = '女';
show profiles;# 查看具体每个阶段耗时情况(后加 id)
show profile for query 2;# 查看整个执行过程中 cpu 占用情况
show profile cpu for query 2;


4.explain

        查看一个 DQL 语句的执行计划。

(1)id

        id 反映一条 DQL 语句执行顺序,id 越大优先级越高,id 相同则按照自上而下顺序执行。

explain select emp_name, dept_name from employees e join departments d on e.dept_no = d.dept_no where e.salary = (select salary from employees where emp_name = 'SMITH');


(2)select_type

  1. 反映查询语句的类型,其常用值包括:
    1. SIMPLE:表示查询中不包含子查询或 UNION 操作,这类查询通常是一个表或最多一个 JOIN 连接;
    2. PRIMARY:表示当前查询是一个主查询;
    3. SUBQUERY:表示当前查询是一个子查询;
    4. UNION:表示查询中包含 UNION 操作;
    5. DERIVED:表示派生表,即查询语句出现在 from 后。

(3)type

  1. 反映查询表中数据时的访问类型,其常用值包括:
    1. NULL:效率最高,一般不会优化到此级别,只有查询时没有查询表,访问类型才是 NULL;
    2. system:访问系统表,一般较难优化此级别;
    3. const:根据主键或唯一性索引查询,索引值是常量;
    4. eq_ref:根据主键或唯一性索引查询,索引值不是常量;
    5. ref:使用非唯一索引进行查询;
    6. range:使用了索引,扫描了索引树的一部分;
    7. index:使用了索引,遍历了整个索引树;
    8. ALL:全表扫描。
  2. 效率最高的是 NULL,效率最低的是 ALL。

(4)possible_keys

        此查询可能用到的索引。 


(5)key

        实际用到的索引。 


(6)key_len

        反映索引在查询中使用的列,所占的总字节数。 


(7)rows

        查询扫描的预估计行数。 


(8)Extra

        与查询相关的额外信息和说明。

http://www.lryc.cn/news/2397146.html

相关文章:

  • ASP.NET MVC添加模型示例
  • 【Part 3 Unity VR眼镜端播放器开发与优化】第二节|VR眼镜端的开发适配与交互设计
  • 第1天:认识RNN及RNN初步实验(预测下一个数字)
  • 全文索引详解及适用场景分析
  • 利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数
  • 树莓派安装openwrt搭建软路由(ImmortalWrt固件方案)
  • 排序算法——详解
  • Go整合Redis2.0发布订阅
  • 电子电气架构 --- 如何应对未来区域式电子电气(E/E)架构的挑战?
  • 鸿蒙OS基于UniApp的区块链钱包开发实践:打造支持鸿蒙生态的Web3应用#三方框架 #Uniapp
  • 易学探索助手-个人记录(十二)
  • Windows 账号管理与安全指南
  • Python窗体编程技术详解
  • 思维链提示:激发大语言模型推理能力的突破性方法
  • NVMe协议简介之AXI总线更新
  • 设计模式——责任链设计模式(行为型)
  • 基于Android的医院陪诊预约系统
  • 基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
  • 【金融基础学习】债券回购方式
  • 第五十九节:性能优化-GPU加速 (CUDA 模块)
  • 单元测试-概述入门
  • ⚡ Hyperlane —— 比 Rocket 更快的 Rust Web 框架!
  • 《AI Agent项目开发实战》DeepSeek R1模型蒸馏入门实战
  • Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决
  • 字节golang后端二面
  • 计算机网络物理层基础练习
  • vscode + cmake + ninja+ gcc 搭建MCU开发环境
  • 三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现
  • JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
  • OpenCV4.4.0下载及初步配置(Win11)