• Mysql进阶【3】论述Mysql优化


    1.通过explain查看sql的详细信息

    Mysql的sql优化企业里边主要是对慢sql进行优化,对语句进行优化,对索引进行优化

    通过explain查看sql的详细信息,并且分析sql语句存在的问题,比如有没有使用到索引、使用了索引还是慢是不是索引设置的不合理、没有显示使用到索引是不是触碰了索引失效的规则。

    使用explian的方法也就是在sql前边加上explian.

     字段解析:

    1.  id:查询序列号,因为explain可能会存在多条,标记条数用的
    2. select_type:查询语句类型:
      1. simple:普通查询
      2. union、union all:联合查询
        1. derived:包含子查询
        2. union result  :连接查询结果

      3. subquery: 子查询
    3. table:查询的表名称

    4. type:连接类型

      1. system:只有一行,或者是空表

      2. ​​​​​​​const:唯一索引或者主键

      3. eq_ref:唯一索引扫描

      4. ref:非唯一索引扫描

      5. range:索引范围扫描

      6. index:使用到了索引

      7. all:全表扫描

    5. possible_keys:此次查询中可能选用的索引
    6. key:查询真正使用到的索引
    7. key_len:显示MySQL决定使用的索引size
    8. ref:哪个字段或常数与 key 一起被使用
    9. rows:显示此查询一共扫描了多少行,这个是一个估计值,不是精确的值。
    10. filtered: 表示此查询条件所过滤的数据的百分比
    11. Extra:额外信息
      1. ​​​​​​​Using filesort:文件排序
      2. Using index:where后使用到了索引,会出现Using index;Using Where

      3. Using  join buffer:连接缓存

     

    2.MySQL 的 SQL 优化

    1.对索引进行优化

    • 表行数很少的去掉索引
    • 表上的索引数量不能过多,索引过多最好去掉不常用的索引,索引的存在会占用磁盘空间,更新数据的时候,不仅仅数据需要维护,索引也需要进行维护
    • 频繁更新的字段不要作为索引,频繁更新性能消耗高
    • 区分度低的不要作为索引,区分度低,查询的数量多,回表的性能消耗增加
    • 无序的值不要作为索引,无序的数据存放排列散乱
    • 尽量使用组合索引,节省空间
    • 需要谨防索引失效规则,不要触碰此规则,避免全表扫描

    2.查询语句加上limit优化sql,查询数据若只有一条,使用limit可以限制全表扫描

    3.能不使用子查询就不使用,可以使用连接代替子查询的就是用连接查询,因为子查询会创建临时表,查询完毕之后会将临时表删除,创建跟删除的过程是不可避免的,势必会降低查询时间

    4.如果需要关联查询,连接的字段最后建立索引

     3.MySQL 的 数据库优化

    数据库优化:开启慢查询优化日志、配置连接数、数据库结构优化

    开启慢查询优化日志

    开启慢查询优化日志,存在慢查询的时候开启日志,然后分配慢查询日志,平时的时候不建议开启,日志的查看需要在用户下边,而不是在mysql里边。

    1. [root@localhost ~]# mysqldumpslow -s t /var/lib/mysql/localhost-slow.log
    2. Reading mysql slow query log from /var/lib/mysql/localhost-slow.log
    3. Count: 1 Time=77.12s (77s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@[192.168.200.1]
    4. select tk.id,ts.* from tb_seckill_goods ts LEFT JOIN tb_sku tk ON tk.id=ts.id where ts.id>N order by ts.price
    5. Count: 1 Time=2.00s (2s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@[192.168.200.1]
    6. select sleep(N)

     配置连接数

    配置这个连接数,就跟连接池一样使用的池化思想,但是也不能设置过高,要根据cpu核数,任务处理时间来合理配置

    1. # 查看 max_connections
    2. show global variables like '%max_connections%'
    3. # 设置 max_connections(立即生效重启后失效)
    4. set global max_connections = 800;

     数据库结构优化

    1. 字段多的表,字段使用频率低的表字段,拆分为多个表,通过主键关联
    2. 增加中间表,需要频繁进行多表关联的多个表,可以建立中间表,建立只有不需要每次都关联,只需要查询中间表即可
    3. 合理增加冗余字段,规范化表的设计。

      4.MySQL 的 硬件优化

    提升硬件设备,例如选择尽量高频率的内存(频率不能高于主板的支持)、提升网络带宽、使用SSD高速磁盘、提升CPU性能等。CPU的选择:cpu决定并发,决定处理能力

     

  • 相关阅读:
    比较身高-第15届蓝桥杯第一次STEMA测评Scratch真题精选
    Linux应用调试之使用strace命令跟踪系统调用
    [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
    JVM基础篇
    深度学习 Pytorch笔记 B站刘二大人 梯度下降算法 Gradient-Descend 数学推导与源码实现 (2/10)
    Golang中init()函数初始化顺序
    51单片机驱动TCS3200颜色识别传感器
    sqli-labs/Less-48
    Java 多线程:锁(二)
    使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中
  • 原文地址:https://blog.csdn.net/qq_45656077/article/details/131101941