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

【背景】

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

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

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

【解决办法】

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

【技巧总结】

  1. 联表状况下,外部的Where尽可能往子查询放,原来不是子查询的大表变子查询。就是把所有联表查询后的where条件全部挪到每个子查询中去先过滤。也就是先过滤再联表,而不是先联表再过滤。
  2. 联表状况下,所有on的一边是常量的,都放进子查询的where。
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日出拳老爷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值