随着业务体量和逻辑复杂度的增长,workcenter 对接口的性能耗时有了新的要求,而提高接口性能最有效的方法固然 对数据库操做逻辑和SQL语句进行优化了。本篇分享一些数据库性能优化的经验和建议
mysql 逻辑架构图:mysql
索引包含一个或多个列的值。MySql 只能高效的利用索引的最左前缀列。索引的优点在于:sql
优化建议:
(1)针对特别长的字符串,可使用前缀索引,根据索引的选择性选择合适的前缀长度
(2)使用多列索引的时候,能够经过 AND 和 OR 语法链接
(3)索引在 where 条件查询和 group by 语法查询的时候特别有效
(4)将范围查询放在条件查询的最后,防止范围查询致使的右边索引失效的问题
(5)索引最好不要选择过长的字符串,并且索引列也不宜为 null数据库
查询质量的三个重要指标:(1)响应时间(服务时间、排队时间)、(2)扫码的行、(3)返回的行
优化建议:
(1)避免查询无关的列,如使用 Select * 返回全部的列表
(2)避免查询无关的行
(3)切分查询。将一个对服务器压力较大的任务,分解到一个较长的时间中,并分屡次执行。如要删除一万条数据,能够分 10 次执行,每次执行完成后暂停一段时间,再继续执行。过程当中能够释放服务器资源给其余任务
(4)分解关联查询。将多表关联查询的一次查询,分解成对单表的屡次查询。能够减小锁竞争,查询自己的查询效率也比较高。由于 MySql 的链接和断开都是轻量级的操做,不会因为查询拆分为屡次,形成效率问题
(5)注意 count 的操做只能统计不为 null 的列,因此统计总的行数使用 count (*)
(6)group by 按照标识列分组效率高,分组结果 不宜出现分组列以外的列
(7)关联查询延迟关联,能够根据查询条件先缩小各自要查询的范围,再关联
(8)Limit 分页优化。能够根据索引覆盖扫码,再根据索引列关联自身查询其余列
(9)Union 查询默认去重,若是不是业务必须,建议使用效率更好的 Union All性能优化
WorkCenter 采用了 TypeORM 做为数据库操做的工具,诚然服务器