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

Mysql——调优

目录

硬件优化

架构设计优化

SQL优化

索引优化

慢SQL优化


硬件优化

CPU、内存、磁盘

架构设计优化

  • 缓存
  • 读写分离
  • 分库分表

SQL优化

  • 查询时尽量不要使用*
  • 多表查询时一定要以小驱大
  • 不要使用like左模糊和全模糊查询(最左匹配原则)
  • 对于多插入的情况进行批量插入
  • 查询时尽量不要对字段做空值判断
    • 当出现基于字段做空值判断的情况时,会导致索引失效,因为判断null的情况不会走索引,一般用not null定义字段,如果想为空的字段可以用个0、""这类空字符代替。
  • 尽量避免深分页的情况出现
    • SELECT * FROM user_login_log LIMIT 1000000, 100;
    • SELECT * FROM user_login_log where id > 1000000 LIMIT 100;增加索引where条件,缩减数据范围
  • 字段结构优化
    • 对于姓名字段,一般都会限制用户名长度,这时不要无脑用varchar,使用char类型更好。
    • 对于一些显然不会拥有太多数据的表,主键ID的类型可以从int换成tinyint、smallint、mediumit。
    • 对于日期字段,不要使用字符串类型,而更应该选择datetime、timestamp,一般情况下最好为后者。
    • 对于一些固定值的字段,如性别、状态、省份、国籍等字段,可以选择使用数值型代替字符串,如果必须使用字符串类型,最好使用enum枚举类型代替varchar类型。

索引优化

  • 避免索引失效的问题
  • 长字段建立索引,可以选用字段值的前N个字符创建索引(建立前缀索引)
  • 不在做范围查询的字段上建立索引,可以选用hash结构代替B+Tree结构,因为Hash结构的索引是所有数据结构中最快的,散列度足够的情况下,复杂度仅为O(1)。
  • 使用Explain执行分析工具
    • 关注type、key、rows、filtered、extra这几个字段
      • key:如果该值为空,则表示未使用索引查询,此时需要调整SQL或建立索引。
      • type:这个字段决定了查询的类型,如果为index、all就需要进行优化。
      • rows:这个字段代表着查询时可能会扫描的数据行数,较大时也需要进行优化。
      • filtered:这个字段代表着查询时,表中不会扫描的数据行占比,较小时需要进行优化。
      • Extra:这个字段代表着查询时的具体情况,在某些情况下需要根据对应信息进行优化。

慢SQL优化

慢SQL:查询的SQL语句耗费较长的时间

  • 慢SQL日志
    • 开启慢sql日志,根据慢sql日志发现执行慢的sql,对sql进行优化处理,线上建议不用开启会影响性能,可以在准生产或者是压测的情况下开启来监控慢sql​
    • 开启慢查询日志 set global slow_query_log = on;
    • 查询默认的慢查询阈值(默认为10秒) show variables like 'long_query_time';
    • 手动修改慢查询阈值(设置为10ms) set global long_query_time = 0.01;
  • 排查思路​
    • 慢sql日志 一般公司会有平台 如果有监控 可以配置慢sql报警​
    • 拿到慢sql 首先使用explain分析 注意看type和row 看type是否是在ref或之下
    • 如果是在explain分析没有发现问题 看performance具体分析是哪个环节耗时较长​
    • 如果都没有问题 再排查慢sql时刻的数据库负载情况
    • 使用show processlist 显示当前正在执行的mysql连接; show STATUS 查看mysql当前状况
http://www.dtcms.com/a/353301.html

相关文章:

  • 从PostgreSQL到人大金仓(KingBase)数据库迁移实战:Spring Boot项目完整迁移指南
  • Python常见设计模式2: 结构型模式
  • jenkins集成liquibase
  • web中的过滤器和拦截器
  • LaTeX论文转word插入mathtype公式
  • KRaft vs ZooKeeper为何迁移、差异全览与落地实践
  • open3D学习笔记
  • 微软研究院最新tts模型VIBEVOICE解析
  • 配送算法16 A Deep Reinforcement Learning Approach for the Meal Delivery Problem
  • postgreSql远程连接数据库总是超时断开?
  • c#联合vision master 的基础教程
  • linux安装containerd
  • 如何使用 Xshell 8 连接到一台 CentOS 7 电脑(服务器)
  • MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
  • 学习 Android (十七) 学习 OpenCV (二)
  • 【PHP】数学/数字处理相关函数汇总,持续更新中~
  • 极限RCE之三字节RCE
  • 嵌入式学习日记(35)TCP并发服务器构建
  • 指纹手机应用核心技术解析:从识别到智能交互
  • 搭建域服务器
  • 毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)
  • ChatGPT登录不进怎么办?
  • NumPy广播机制:高效数组运算的秘诀
  • 预测模型及超参数:2.传统机器学习:PLS及其改进
  • 守术,明法,悟道
  • 欧盟《人工智能法案》生效一年主要实施进展概览(二)
  • 如何借助文档控件 TX Text Control 轻松优化 PDF 文件大小?
  • 中科大携手智源发布 BGE-Reasoner:引领推理式信息检索新高度
  • AI数据治理:战略选择与伦理平衡
  • C6.4:晶体管模型