大表的索引问题

最新系统生产环境的性能发现有所下降,把sql提出来,发现是在程序备份的时候耗时明显增多(备份时是用insert select语句)。经过排查,执行计划是稳定的,而且select出来数据还是很快,所以初步定位为插入时性能有问题。看了下表的情况,表的数据达到9亿,再看了下索引情况:索引结构达到5层,叶子块达到400多万个数据块!这就是慢的原因所在。就好像一本书,如果书的页数越来越多,对应的目录也就越来越多,如果你插入几页,就要去庞大的索引结构里面去扫描,性能的影响可想而知!也就是我们常说的索引维护成本太高!

  解决办法:由于表的性质,无法对表进行分区管理(没有合适的分区字段),所以采用了中转历史资料的办法:新建临时表,在程序备份时先插入临时表,然后再统一将临时表的资料转储到历史表中,由于这个转储动作使用另外一个单独的程序运行,所以主程序的性能就得到很大的提升。注意这个临时表一定不要建过多索引,否则时间久了,一样会有索引维护成本过高带来的性能问题,而且还要定期清理临时表。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值