【Mysql】【DB】【sql】提高数据库搜索性能的经验

【背景】

项目需要,经常给金融机构做数字化项目,涉及到各类复杂的查询,今天就我认为最重要的影响性能的数据库查询经验以及解决方案做一个分享。

【常见查询设计中最影响性能的方面】

  1. 最影响性能的是联表,且联表方面,通过造索引等方法得到的性能改善并不显著。
  2. 联表在存在大量MasterData的情况下最影响性能,比如每次查询都要将当月的交易信息与用户信息表进行关联,而用户信息表作为MasterData,为了反应历史状况每个月都有上传,因此每次联表等于和存量到如今的历史用户信息表进行联表查询,这样的大数据量联表必然导致查询缓慢。

【解决办法】

  1. 从设计上进行改进,上传时就可以不积累每个月的全量用户信息,而是采取根据关键字insert duplicate update的方式,上传时,如果关键字不存在就新增记录,如果已重复就更新记录,这样master data的数据量就不会有随着事件的巨量增长。
  2. 从查询语句上进行改进,每次联表前,先用子查询缩小一波master data的数量,然后再进行查询即可。

【技巧总结】

  1. 联表状况下,外部的Where尽可能往子查询放,原来不是子查询的大表变子查询。
  2. 联表状况下,所有on的一边是常量的,都放进子查询的where。

你可能感兴趣的:(数据库,数据库,mysql,sql)