• MYSQL4:慢查询的优化方法和锁机制


    1. 慢查询(MySQL)

    1.1 如何找到慢SQL

    1. 慢查询日志
      1)MySQL服务器在命令执行前后计算每条命令的执行时长,超过某个阈值记录下来
    2. 获取慢查询日志
    //1)开启慢查询日志
    set global slow_query_log=1
    //2)指定慢查询日志的存储路径和文件
     slow_query_log_file 
    //3)指定记录慢查询日志的SQL执行时间阈值(默认为10s)
    long_query_time 10
    //4)慢查询截图
    第一行:记录时间
    第二行:用户名,用户IP和线程ID
    第三行:执行花费时间
    第四行:时间戳
    第五行:具体的SQL语句
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 对单条慢SQL进行分析:explain
      1)Type:搜索数据的方法,const是直接按主键或唯一键读取;eq_ref用于联表查询的情况,按联表的主键或唯一键联合查询;ref(每次只匹配少数行,使用左覆盖索引或者非主键或者非唯一键);range:索引的范围查找;ALL:全表查询。
      2)Extra:using index,索引中包含查询的所有列,不需要回表,使用覆盖索引。using where 需要回表
      3)Key :实际使用的索引

    1.2 慢SQL的原因

    1.未建索引:整张表没有建索引;

    1. 对经常使用的列建立索引(索引一定是非空且唯一的)
    1. 索引未命中:有索引,但是部分查询条件下索引未命中;
      1)模糊查询:使用了like ’ %T ’ 进行模糊查询,使得左边是模糊的,只能进行全表搜索。
      2)or筛选:使用or进行筛选,当or两边有一边没有索引时,都不进行索引搜索。
      3)使用复合索引:使用复合索引,不满足最左匹配原则
      4)索引参与函数:where当中索引列参与运算和使用函数,索引进行失效
    2. 搜索了额外的非必要字段,导致回表
    3. 排序,聚合导致慢查询
    4. 相同内容多次查询数据库;
    5. 未消限制搜索范围或者限制的搜索范围在预期之外,导致全部扫描;

    1.3 如何解决慢SQL问题

    1. 分库分表:冷数据和热数据分离
    2. 多层嵌套查询变为多次查询
    3. in子查询影响查询的性能,使用join方法代替
    4. 一次查询数量过于庞大,查分为多次查询,再进行拼装
    5. 使用了方向查询,查询的对象过多。

    2. 锁机制

    慢SQL优化实战笔记

  • 相关阅读:
    软考高级:DNS欺骗相关知识和例题
    利用宝塔实现百度自动推送
    leetcode 474. Ones and Zeroes 一和零(中等)
    ConcurrentLinkedQueue解析
    PyTorch中的CUDA操作
    线上应用部署了两台load为1四核服务器
    Flume系列之:Java读取读取flume配置文件,并把配置写入到zookeeper节点,再根据写入到zookeeper中的配置启动flume agent
    程序员VS产品经理的世纪之争
    数据比对总结
    介绍各个PHP版本一些特性知识点
  • 原文地址:https://blog.csdn.net/qq_42974034/article/details/125111062