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

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.xdnf.cn/news/10195.html

相关文章:

  • 11.springCloud AlibabaNacos服务注册和配置中心
  • 【算法训练营Day04】链表part2
  • mkcert实现本地https
  • Kafka 如何保证顺序消费
  • GitHub 趋势日报 (2025年05月30日)
  • DeepSeek 赋能自动驾驶仿真测试:解锁高效精准新范式
  • 前端面经 DNSxieyi1
  • Go语言的context
  • 第4节 Node.js NPM 使用介绍
  • linux 1.0.6
  • BFD 基本工作原理与实践:如何与 VRRP 联动实现高效链路故障检测?
  • 数据库运维管理系统在AI方向的实践
  • 【拓扑排序】P7150 [USACO20DEC] Stuck in a Rut S|普及+
  • AnyTXT Searcher 文档内容搜索工具 v1.3.2034 官方版
  • LeetCode - 面试题 02.04. 分割链表
  • gcc相关内容
  • 单例模式的类和静态方法的类的区别和使用场景
  • python打卡day41
  • bert扩充或者缩小词表
  • 企业AI部署热潮下的安全隐忧:速度与安全的博弈
  • QT入门学习
  • 电脑驱动程序更新工具, 3DP Chip 中文绿色版,一键更新驱动!
  • 【基础算法】高精度(加、减、乘、除)
  • 【iOS】方法交换
  • 【SpringBoot实战】优雅关闭服务
  • 【NLP 78、手搓Transformer模型结构及实战】
  • 34.x64汇编写法(一)
  • stm32——I2C协议
  • 第三方软件评测机构如何助力软件品质提升及企业发展?
  • 微信小程序真机调试时如何实现与本地开发环境服务器交互