分享Sql性能优化的一些建议
2021/6/14 19:21:39
本文主要是介绍分享Sql性能优化的一些建议,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
随着业务体量和逻辑复杂度的增加,workcenter 对接口的性能耗时有了新的要求,而提升接口性能最有效的方法当然 对数据库操作逻辑和SQL语句进行优化了。本篇分享一些数据库性能优化的经验和建议
数据库结构优化
mysql 逻辑架构图:
- 第一层:客户端通过连接服务,将要执行的 sql 指令传输过来
- 第二层:服务器解析并优化 sql,生成最终的执行计划并执行
- 第三层:存储引擎,负责数据库的存储和提取
索引优化
索引包含一个或多个列的值。MySql 只能高效的利用索引的最左前缀列。索引的优势在于:
- 减少查询扫描的数据量
- 避免排序和零时表
- 将随机 IO 变为顺序 IO (顺序 IO 的效率高于随机 IO)
优化建议:
(1)针对特别长的字符串,可以使用前缀索引,根据索引的选择性选择合适的前缀长度
(2)使用多列索引的时候,可以通过 AND 和 OR 语法连接
(3)索引在 where 条件查询和 group by 语法查询的时候特别有效
(4)将范围查询放在条件查询的最后,防止范围查询导致的右边索引失效的问题
(5)索引最好不要选择过长的字符串,而且索引列也不宜为 null
SQL查询优化
查询质量的三个重要指标:(1)响应时间(服务时间、排队时间)、(2)扫码的行、(3)返回的行
优化建议:
(1)避免查询无关的列,如使用 Select * 返回所有的列表
(2)避免查询无关的行
(3)切分查询。将一个对服务器压力较大的任务,分解到一个较长的时间中,并分多次执行。如要删除一万条数据,可以分 10 次执行,每次执行完成后暂停一段时间,再继续执行。过程中可以释放服务器资源给其他任务
(4)分解关联查询。将多表关联查询的一次查询,分解成对单表的多次查询。可以减少锁竞争,查询本身的查询效率也比较高。因为 MySql 的连接和断开都是轻量级的操作,不会由于查询拆分为多次,造成效率问题
(5)注意 count 的操作只能统计不为 null 的列,所以统计总的行数使用 count (*)
(6)group by 按照标识列分组效率高,分组结果 不宜出现分组列之外的列
(7)关联查询延迟关联,可以根据查询条件先缩小各自要查询的范围,再关联
(8)Limit 分页优化。可以根据索引覆盖扫码,再根据索引列关联自身查询其他列
(9)Union 查询默认去重,如果不是业务必须,建议使用效率更好的 Union All
TypeORM性能优化
WorkCenter 采用了 TypeORM 作为数据库操作的工具,诚然
本文由博客一文多发平台 OpenWrite 发布!
这篇关于分享Sql性能优化的一些建议的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性