导图社区 慢 SQL 处理 大全
MySQL 处理 大全~你想要的知识都在这里。 慢 SQL 可能对服务平稳运行造成破坏,是日常开发中经常带来应用抖动的最大隐患。
从本质上讲,IP地址是网络设备之间发送信息时的标识符,其中包含了定位信息并使设备可进行通信。互联网需要一种方式来区分不同的计算机、路由器和网站。IP地址提供了这样一种方式,并且是互联网运作的重要组成部分。
程序员必备程序排查优化手册——精华收藏版,本图是最合适的性能指南,如果对性能优化没有思路,基本可以按照这个挨个排查并优化!
数据库底层非常非常重要的机制,如果要深入学习mysql 必须掌握这块知识!!! 一次搞懂数据库底层机制——回表,回表是数据库查询过程中的一种操作,一起来看。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
慢 SQL 处理指南
问题
慢 SQL 可能对服务平稳运行造成破坏,是日常开发中经常带来应用抖动的最大隐患。
慢SQL的排查与解决
慢SQL的隐患
对服务平稳运行的影响
日常开发中的常见问题
避免慢SQL的方法
优化SQL查询
拆分复杂SQL
识别复杂SQL
识别SQL中的子查询、关联查询、聚合函数等复杂结构
识别SQL中的多表连接、排序、分组等操作
分解复杂SQL
将复杂SQL分解为多个简单的单表查询
减少多表连接、排序、分组等操作
优化单表查询
使用索引
减少数据量
优化查询条件
合并单表查询结果
使用UNION、UNION ALL等操作合并单表查询结果
避免使用JOIN操作合并结果
优化合并结果
减少合并结果的数据量
优化合并结果的排序、分组等操作;
分析问题并使用EXPLAIN
使用EXPLAIN命令
查看执行计划
分析索引使用情况
检查数据分布
避免问题因素
历史原因的复杂SQL
数据量的增长
解决慢SQL的思路
观察SQL
了解业务场景
梳理关联关系
分析问题
使用EXPLAIN语句
分析指标(type、possible_keys、key、rows、extra)
指定方案
改造为分页查询
直接获取全量数据并在内存中排序
子查询改为关联查询
使用force_index指定索引或修改排序方式
使用LIMIT和分页避免全表扫描
优化数据倾斜严重的情况
使用ES进行查询或限制分页深度
优化原则
创建合适的索引
了解索引类型
普通索引
适用于大多数场景
唯一索引
适用于唯一值字段
复合索引
适用于多个字段组合
空间索引
适用于空间数据
全文索引
适用于文本搜索
选择索引字段
选择经常查询的字段
选择区分度高的字段
选择长度适中的字段
评估索引效果
使用 EXPLAIN 命令
优化索引策略
定期维护索引
删除冗余索引
合并索引
调整索引顺序;
减少不必要访问的列
使用覆盖索引
什么是覆盖索引
覆盖索引是指在查询语句中,所有需要的数据都可以从索引中获取,而不需要回表查询
优点:减少回表查询次数,提高查询效率
缺点:可能导致索引过大,影响写入性能
如何创建覆盖索引
选择合适的索引列
选择查询语句中经常使用的列作为索引列
选择区分度高的列作为索引列
创建复合索引
将多个列组合成一个复合索引
复合索引可以提高查询效率,减少索引数量
使用覆盖索引的注意事项
避免在索引列上进行函数操作
函数操作可能导致索引失效
避免在索引列上进行类型转换
类型转换可能导致索引失效
避免在索引列上进行计算
计算可能导致索引失效
避免在索引列上进行模糊查询
模糊查询可能导致索引失效
避免在索引列上进行排序
排序可能导致索引失效
避免在索引列上进行分页
分页可能导致索引失效
避免在索引列上进行聚合
聚合可能导致索引失效;
语句改写
查询语句优化
确保查询条件字段已建立索引
避免使用函数或运算符,导致索引失效
使用 LIMIT 限制返回数据量
使用 WHERE 子句过滤数据
避免使用子查询
使用 JOIN 语句替代子查询
使用 EXISTS 子句替代子查询
优化 OR 条件
使用 UNION 替代 OR 条件
使用 IN 替代 OR 条件
更新语句优化
批量更新
使用事务进行批量更新
使用存储过程进行批量更新
减少锁争用
避免长时间持有锁
降低事务隔离级别
删除语句优化
使用 LIMIT 限制删除数据量
使用事务进行批量删除
使用存储过程进行批量删除;
数据结转
什么是数据结转
数据结转是指将数据从一个地方转移到另一个地方
数据结转的原因
数据量过大
数据格式不兼容
数据需要处理
数据结转的方式
直接复制
导出导入
数据库连接
数据结转的优化
选择合适的数据结转方式
直接复制适用于小数据量
导出导入适用于大数据量
数据库连接适用于实时数据
优化数据结转速度
提高网络带宽
优化数据库查询
优化数据格式
数据结转的注意事项
确保数据安全
使用加密传输
限制访问权限
确保数据完整性
使用事务处理
定期备份数据;
选择合适的列进行排序
避免使用字符串类型进行排序
字符串类型排序性能较差
建议使用数值类型进行排序
避免使用表达式进行排序
表达式排序性能较差
建议使用列值进行排序
避免使用多列进行排序
多列排序性能较差
建议使用单列进行排序
避免使用排序列进行分组
排序列分组性能较差
建议使用其他列进行分组;
适当的列冗余
列冗余可以减少表连接次数
连接次数越多,查询速度越慢
列冗余可以减少连接次数,提高查询速度
列冗余可以减少磁盘I/O
磁盘I/O次数越多,查询速度越慢
列冗余可以减少磁盘I/O,提高查询速度
列冗余可以减少查询复杂度
查询复杂度越高,查询速度越慢
列冗余可以减少查询复杂度,提高查询速度
列冗余可以提高查询性能
查询性能越好,查询速度越快
列冗余可以提高查询性能,提高查询速度;
SQL拆分
拆分原因
提高查询效率
降低锁竞争
提高可维护性
拆分方法
垂直拆分
按照业务功能拆分
拆分后可以独立维护
降低耦合度
水平拆分
按照数据范围拆分
提高查询性能
降低数据冗余
拆分原则
最小化拆分
避免过度拆分
降低维护成本
最大化利用硬件资源
降低硬件成本
最小化数据冗余
降低数据不一致性
提高数据准确性
最大化数据独立性
降低数据耦合度
提高数据可维护性;
适当应用ES