sql优化记录一

本文分享了一次SQL查询优化的过程,从原本的连表查询导致的36秒超时,通过子查询、分页查询等方法逐步优化至1.9秒。讨论了单表查询的优势,并提出了利用Redis缓存进一步提升性能的可能性。总结强调了避免连表查询和应用层面处理的重要性。
摘要由CSDN通过智能技术生成

sql优化记录一

业务背景

列出每个活动的参与人数,从Oracle中查询

  • 表A 活动表,内含活动ID、活动信息。

  • 表B 客户活动明细表,记录客户参与的活动明细。

其中:

  • 表A为小表,记录数为2W
  • 表B为大表,记录数为2000W

原情况

关联查询,进行Count,查询需36秒,超出网关超时时间30秒。

改进尝试

子查询,多次的单表查询。

  • 子查询有提升,仍较慢
  • 多次查询,由应用在B表中查出所有的活动ID,使用IN在B表中Count。其中第二步查询需2.5秒。

小改进

在第二步查询中,有在sql中拼字符串的操作,转为在java中进行,查询耗时降低至1.9秒。

再改进

分页查询

异步使用单个活动ID查询,一次Count单个活动所需时长为0.5秒。

终极但目前还没必要

利用redis缓存,每次更新大表B时,更新Redis中活动的人数。不过暂时还没这样的需求。

总结

连表查询对数据库消耗巨大,性能与单表查询无法比较。让应用进行单表查询往往能解决很多问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值