MySQL 慢查询优化

MySQL慢查询识别与优化策略

一、识别慢查询

查询或开启慢查询日志

-- 查看慢查询日志文件位置
SHOW VARIABLES LIKE 'slow_query_log_file';

-- 查看慢查询阈值(单位:秒)
SHOW VARIABLES LIKE 'long_query_time';

-- 查看是否记录未使用索引的查询
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';

-- 查看慢查询日志输出格式(FILE/TABLE/NONE)
SHOW VARIABLES LIKE 'log_output';

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;  -- 设置慢查询阈值(秒)
SET GLOBAL log_queries_not_using_indexes = 'ON';

查看慢日志文件

    分析慢查询

    文件里详细记录了慢查询的sql语句。       

    使用Explain分析SQL执行计划

    explain SELECT * from t_pretreatment_original_and_translation_20251 tp
    LEFT JOIN t_pretreatment_original_and_translation_extend_20251 tpe on tp.id = tpe.original_and_translation_id
    where tp.project_id ='D25012100800'
    and tpe.original_plain_text like '%规范化的发挥';

    二、常见优化策略

    1. 索引优化

    • 添加缺失索引
    • 避免索引失效
      • 不要在索引列上使用函数:WHERE YEAR(create_time) = 2023 → WHERE create_time BETWEEN '2023-01-01' AND '2023-12-31'
      • 避免前导模糊查询:LIKE '%abc' → LIKE 'abc%'
      • 注意隐式类型转换:WHERE phone = 13800138000 → WHERE phone = '13800138000'

    2. SQL语句优化

    • 避免SELECT *
    • 优化JOIN操作
    • 分页优化
    -- 低效
    SELECT * FROM orders LIMIT 1000000, 20;
    
    -- 高效
    SELECT * FROM orders WHERE id > 1000000 LIMIT 20;

    3. 数据库设计优化

    • 合理的数据类型

      • 用INT代替VARCHAR存储ID
      • 用TIMESTAMP代替VARCHAR存储时间
    • 垂直拆分大表

    • 引入ES等存储库

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值