分享Sql性能优化的一些建议

中科公益爱心 http://disease.39.net/bjzkbdfyy/190517/7147739.html

随着业务体量和逻辑复杂度的增加,workcntr对接口的性能耗时有了新的要求,而提升接口性能最有效的方法当然对数据库操作逻辑和SQL语句进行优化了。本篇分享一些数据库性能优化的经验和建议

数据库结构优化

mysql逻辑架构图:

第一层:客户端通过连接服务,将要执行的sql指令传输过来第二层:服务器解析并优化sql,生成最终的执行计划并执行第三层:存储引擎,负责数据库的存储和提取

索引优化

索引包含一个或多个列的值。MySql只能高效的利用索引的最左前缀列。索引的优势在于:

减少查询扫描的数据量避免排序和零时表将随机IO变为顺序IO(顺序IO的效率高于随机IO)

优化建议:(1)针对特别长的字符串,可以使用前缀索引,根据索引的选择性选择合适的前缀长度(2)使用多列索引的时候,可以通过AND和OR语法连接(3)索引在whr条件查询和groupby语法查询的时候特别有效(4)将范围查询放在条件查询的最后,防止范围查询导致的右边索引失效的问题(5)索引最好不要选择过长的字符串,而且索引列也不宜为null

SQL查询优化

查询质量的三个重要指标:(1)响应时间(服务时间、排队时间)、(2)扫码的行、(3)返回的行

优化建议:(1)避免查询无关的列,如使用Slct*返回所有的列表(2)避免查询无关的行(3)切分查询。将一个对服务器压力较大的任务,分解到一个较长的时间中,并分多次执行。如要删除一万条数据,可以分10次执行,每次执行完成后暂停一段时间,再继续执行。过程中可以释放服务器资源给其他任务(4)分解关联查询。将多表关联查询的一次查询,分解成对单表的多次查询。可以减少锁竞争,查询本身的查询效率也比较高。因为MySql的连接和断开都是轻量级的操作,不会由于查询拆分为多次,造成效率问题(5)注意count的操作只能统计不为null的列,所以统计总的行数使用count(*)(6)groupby按照标识列分组效率高,分组结果不宜出现分组列之外的列(7)关联查询延迟关联,可以根据查询条件先缩小各自要查询的范围,再关联(8)Limit分页优化。可以根据索引覆盖扫码,再根据索引列关联自身查询其他列(9)Union查询默认去重,如果不是业务必须,建议使用效率更好的UnionAll

TypORM性能优化

WorkCntr采用了TypORM作为数据库操作的工具,诚然

本文由博客群发一文多发等运营工具平台OpnWrit发布




转载请注明:http://www.aierlanlan.com/rzfs/2291.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了