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

爱心建站网国内免费建网站

爱心建站网,国内免费建网站,江苏中高风险地区名单,网站建设代码上传MySQL 慢查询问题是性能调优的核心之一。本笔记详细介绍 慢查询的定位、分析、优化方法,包括 SQL 优化、索引优化、执行计划分析、表设计优化、数据库配置优化 等内容。一、慢查询的定义 慢查询(Slow Query):执行时间超过 long_qu…

MySQL 慢查询问题是性能调优的核心之一。本笔记详细介绍 慢查询的定位、分析、优化方法,包括 SQL 优化、索引优化、执行计划分析、表设计优化、数据库配置优化 等内容。


一、慢查询的定义

慢查询(Slow Query):执行时间超过 long_query_time 阈值的 SQL 语句。

查看慢查询日志配置

-- 查看是否开启慢查询日志
SHOW VARIABLES LIKE 'slow_query_log';-- 开启慢查询日志
SET GLOBAL slow_query_log = ON;-- 设置慢查询阈值(默认 10 秒)
SET GLOBAL long_query_time = 1;-- 查看慢查询日志文件路径
SHOW VARIABLES LIKE 'slow_query_log_file';

二、慢查询优化的总体思路

核心步骤

  1. 确认慢 SQL:通过慢查询日志、SHOW PROCESSLISTPerformance Schema
  2. 分析执行计划:使用 EXPLAINEXPLAIN ANALYZE
  3. 优化 SQL 语句:减少数据扫描量,改写语句。
  4. 优化索引:添加合适索引,避免索引失效。
  5. 优化表结构:拆分表、调整字段类型。
  6. 优化数据库配置:调整缓存、连接池。

三、常见慢查询原因

  • 未命中索引(全表扫描)。
  • 索引失效(函数、隐式转换、OR 等)。
  • 返回数据量过大(缺少分页或 LIMIT)。
  • SQL 语句不合理(子查询、嵌套、IN 大集合)。
  • 表设计不合理(字段类型不合适,缺少主键)。
  • 数据库参数配置问题(Buffer Pool 太小)。

四、定位慢查询

方法 1:慢查询日志

开启慢查询日志,找到耗时最长的 SQL。

SHOW VARIABLES LIKE 'slow_query_log';

方法 2:Performance Schema

实时监控 SQL 执行情况。

方法 3:SHOW PROCESSLIST

查看当前正在执行的 SQL。


五、慢查询优化方法

1. 使用 EXPLAIN 分析执行计划

EXPLAIN 查看 SQL 的执行过程:

EXPLAIN SELECT * FROM orders WHERE user_id = 100;

EXPLAIN 关键字段:

  • type:连接类型(ALL、index、range、ref、const、eq_ref、system)。
  • key:使用的索引。
  • rows:扫描的行数。
  • Extra:是否使用文件排序(Using filesort)、临时表(Using temporary)。

优化目标

  • 避免 ALL(全表扫描),尽量使用 refconst
  • 使用合适的索引。

2. SQL 语句优化技巧

**(1) 避免 SELECT ***

只查询需要的字段,减少数据量:

-- 慢
SELECT * FROM users;-- 优化
SELECT id, name FROM users;
(2) 避免使用 OR,用 INUNION ALL 替代
-- 慢
SELECT * FROM users WHERE status = 1 OR age = 20;-- 优化
SELECT * FROM users WHERE status IN (1, 20);
(3) 避免在索引列上使用函数
-- 慢(索引失效)
SELECT * FROM users WHERE DATE(create_time) = '2024-01-01';-- 优化
SELECT * FROM users WHERE create_time >= '2024-01-01' AND create_time < '2024-01-02';
(4) 避免隐式类型转换
-- 慢(字段是 VARCHAR,条件写成数字)
SELECT * FROM users WHERE id = 100;-- 优化
SELECT * FROM users WHERE id = '100';
(5) LIMIT 分页优化

大偏移量分页会导致性能差:

-- 慢
SELECT * FROM orders LIMIT 1000000, 10;-- 优化(记录上次最大 ID)
SELECT * FROM orders WHERE id > 1000000 LIMIT 10;

3. 索引优化

(1) 添加合适的索引
  • 单列索引、联合索引。
  • 最左前缀原则。
(2) 避免索引失效场景
  • LIKE 左模糊(LIKE '%xx')。
  • OR 条件。
  • 函数、表达式。
  • 隐式类型转换。
(3) 使用覆盖索引

只查询索引列,避免回表:

SELECT user_id FROM orders WHERE user_id = 100; -- 如果 user_id 有索引,可以直接覆盖

4. 表设计优化

  • 字段类型选择合适(如 INT 优于 VARCHAR)。
  • 避免大字段(TEXT/BLOB)频繁查询。
  • 表分区、分库分表。

5. 数据库参数优化

  • 调整 InnoDB Buffer Pool Size(缓存更多索引和数据页)。
  • 调整 query_cache_size(MySQL 8.0 已移除)。
  • 调整 sort_buffer_size

六、常用工具

  • EXPLAIN / EXPLAIN ANALYZE:执行计划分析。
  • SHOW PROFILE:查看 SQL 执行各阶段耗时。
  • 慢查询日志
  • pt-query-digest(Percona 工具):分析慢日志。

七、面试高频问答

Q1:如何排查 MySQL 慢查询?

  • 开启慢查询日志,分析日志。
  • 使用 EXPLAIN 查看执行计划。
  • 查看索引是否命中。
  • 使用 SHOW PROFILE 分析 SQL 执行阶段。

Q2:EXPLAIN 中 type 字段,哪个性能最好?

  • 最好:consteq_ref
  • 最差:ALL(全表扫描)。

Q3:为什么 LIMIT 大偏移量会慢?如何优化?

  • 因为需要扫描并跳过大量记录。
  • 优化方法:记录上次最大 ID,或者使用 延迟关联

Q4:如何避免索引失效?

  • 遵循最左匹配原则。
  • 避免函数、隐式转换、OR。
  • LIKE 避免左模糊。

Q5:如何快速定位最慢的 SQL?

  • 开启慢查询日志。
  • 使用 pt-query-digest 工具。

八、总结优化 checklist

SQL 语句优化

  • 避免 SELECT *。
  • 避免 OR,使用 IN。
  • 避免函数、表达式操作。
  • 避免隐式类型转换。

索引优化

  • 建立合理索引。
  • 使用覆盖索引。
  • 遵守最左前缀原则。

表设计优化

  • 字段类型选择合理。
  • 避免大字段频繁查询。

数据库参数优化

  • 调整 Buffer Pool。
  • 优化连接池。

核心原则
减少扫描行数 + 使用索引 + 合理 SQL 改写 + 缓存热点数据 + 监控分析工具

http://www.dtcms.com/a/543294.html

相关文章:

  • 国外的自建网站怎么做html5手机网站 源码
  • 深圳企业网站开发杭州做网站
  • 点点 网站建设网站主题和建设
  • 合肥金融网站设计北京it外包公司排行榜
  • 网站运营与推广计划书怎么做环球资源网成立时间
  • google网站收录入口网站如何才能被百度收录
  • 简述企业网站建设的流程漯河网页制作
  • 商丘手机网站建设网址怎么做成二维码
  • 网站开发 教程企业网站托管如何更有效
  • 南宁西乡塘区网站建设创意赣州网站建设
  • 网站浮标怎么做wordpress 文章分类页面
  • 公司网站建设周期及费用房产网站建设公司
  • 网站优化排名的公司有哪些猎头公司名字
  • 厦门网站开发城乡建设管理局的网站
  • 山东住房和城乡建设厅网站注册中心武昌网站制作公司
  • 技术合同 网站开发oa系统是什么
  • 企业网站建设情况说明创建网站的目的是什么原因
  • 建筑网站建设案例天津市建设工程信息网站
  • 定制网站开发接活厂房网行业门户网站建设策划方案ppt
  • wordpress别名自动英文优化seo报价
  • 祥云网站优化互联网公司排名
  • 佛山做网站有哪几家南宁建设职业技术学院招聘信息网站
  • 给网站做rss做网站买狗怎么样
  • 湖北省住房与城乡建设厅网站对外贸易企业网站建设流程
  • 南漳网站制作专业模板建站
  • wordpress 无限下拉菜单合肥全网优化
  • 百度站长平台网站验证设计配色网站
  • 湖南新能源公司中企动力网站建设免费的招聘网站有哪些
  • 狮岭做网站影视网站怎么做优化
  • 广州外贸营销型网站发布一个网站需要什么