• 【HBZ分享】云数据库如何定位慢查询


    如何配置Mysql慢查询

    1. 查询慢日志相关信息:SHOW VARIABLES LIKE '%query%'
    2. 开启慢日志记录文件:set global slow_query_log = 'ON'
    3. 记录慢日志的文件名:slow_query_log_file
    4. 配置达到慢查询时间:set global long_query_time = 1   // 修改慢查询时间1s,即查询超过1s就记录到慢查询日志中
    5. 注意:修改慢查询时间后,记得需要重新连接才能生效
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如何定位慢查询

    1. 通过EXPLAIN查询该语句是否走了索引,没走索引说明走了全表扫描
    2. 注意:生产环境一般不允许这样做,生产环境一般会通过自动化平台,通过可视化界面来看

    EXPLAIN 如何使用?

    1. 使用方式:EXPLAIN SELECT * FROM test WHERE age = 10

    EXPLAIN 中的Type字段含义

    1. type = all:直接全表扫描数据, 效率极低
    2. type = index:需要优化,虽然也是走索引,但表示全表扫描【索引】文件,不是扫数据
    3. type = range:sql最低的满足条件是range,只查询给定范围的行,使用一个索引来选择行
    4. type = ref:一般的要求该级别,当字段加了普通索引,而条件恰好也是该字段,则就是ref类型,比如使用name = ‘hbz’这个条件,而name创建了普通索引,此时就是ref
    5. type = eq_ref:通过主键 或 唯一索引进行关联表查询时就是eq_ref,算是除了const最好的结果了
    6. type = const:性能极高的级别,根据主键索引id找,一般都是const,无需优化

    Mysql为什么做联合索引要遵从最佳左前缀法则?

    1. 联合索引会以前缀优先
    2. 如果联合顺序是 name, age, position
    3. 举例:
    // 顺序:name, age, postion -->由于条件是按照联合索引顺序,所以会触发ref索引级别
    SQL: SELECT name, age FROM people WHERE name = 'hbz' and age = 21 and positon = 'tetst'
    
    // 只有name -->由于条件带有前缀name,所以会触发ref索引级别
    SQL: SELECT name, age FROM people WHERE name = 'hbz'
    
    // 只有name, position -->由于条件带有前缀name,所以会触发ref索引级别
    SQL: SELECT name, age FROM people WHERE name = 'hbz' and positon = 'tetst'
    
    // 只有position, 没有name -->由于没有前缀name,所以不会触发索引
    SQL: SELECT name, age FROM people WHERE positon = 'tetst'
    
    // 有name,但和联合索引顺序不一致 -->条件有name字段,所以会触发索引,虽然不是按顺序,但是mysql底层会把name给优化放到前面
    SQL: SELECT name, age FROM people WHERE positon = 'tetst' and name = 'hbz' 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 综上所述,所谓最左前缀法则,就是,如果where后面带有name,那么必然会走索引,name的顺序在哪里都无所谓,因为mysql底层会优化,把name放到最前面。但如果没有name,联合索引的其他字段顺序对也是无法走索引的。这就叫最佳做前缀法则,联合索引的开头字段必须存在。
  • 相关阅读:
    网络调试工具编程实现
    SpringCloud:使用Nacos作为配置中心
    Enviro 3 - Sky and Weather
    鸿蒙应用开发-初见:ArkUI
    Apache Doris FE 元数据常见故障处理
    在CentOS上使用Gunicorn和systemd完整部署Flask应用:详细指南
    SpringBoot教程(16) 什么是RESTful?
    Rancher 2.6 全新 Logging 快速入门(2)
    ISPE GAMP5 中文版
    解析类型参数
  • 原文地址:https://blog.csdn.net/a645293829/article/details/125508852