千万级数据处理

我会带着你远行 2022-05-14 14:57 397阅读 0赞

千万级数据处理

前言
  1. 近日一次版本上线时,涉及到千万级数据处理,因一时疏漏造成Oracle数据库回滚段爆掉,造成版本重复发布。
  2. 系统日常运行中,产生部分历史数据,这些数据不能删除。日积月累情况下,出现超级大的数据量。
  • 需要将客户信息历史表中客户性别为女性,出生日期在90年以前的客户存放至另一张表。目前客户信息历史表的数据量高达9000多万。

如下SQL在执行过程:耗时40多分钟,后续变更处理方式后,耗时4-5分钟。数据库回滚段使用5G左右空间。

  1. --执行SQL如下,table_cust_history该表数据量高达9000多万。
  2. insert into table_temp
  3. select ... from table_cust_history
  4. where sex=''
  5. and birthday < '';
  6. SQl分析:
  7. 1. 首先分析查询,因数据量大,查询条件必须走索引,才能保证查询速度
  8. 2. 耗时40分钟的原因是,我们在创建table_temp表的时候,惯性思维给该表加的相应字段的索引,导致没插入一条数据,索引都要变动,耗时就上去了
  9. 3. 正确的做法应该为:删除索引(主键索引要保留),插入数据,再加入索引。最后加索引耗时仅需几分钟。
  10. --执行如下删除SQl 删除1150万左右的数据,耗时20分钟
  11. delete from table_cust_history
  12. where exists( select 1 from table_temp where '条件' )
  13. SQL分析:两张表的关联条件必须要有索引,
  14. 耗时比上面SQL长,是因为这个SQL要查询多次,子查询的条件查询,删除时条件查询。

因业务逻辑更新,需要初始化表中的数据。需要初始化的数据为4000多万。
执行SQl更新字段包含一个带索引的字段。耗时40分钟,回滚段使用了19-20G。

总结:索引不仅仅提升了查询的效率,同时也会降低大数据量存储更新的效率

  1. 若遇见千万级的数据查询,一定要使用索引字段限制数据量。
  2. 大数据量更新,插入数据时,建议删除无关紧要的索引,等数据操作完毕后,再加入索引。
  3. 操作千万级数据时,应提前看一下数据库回滚段设置大小。如果可以尽量大些。

千辛万苦,熬到半夜,吸取经验,记得教训。

希望能给前赴后继的小伙伴带来帮助。

发表评论

表情:
评论列表 (有 0 条评论,397人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 数据迁移

    背景介绍 项目中表数据存在超过50%的逻辑删除数据,影响查询性能,本次计划将逻辑有效的数据迁移到新表,使得表数据量减少,索引文件减少,提高查询效率。 大体思路 通过存储

    相关 Python处理数据

    从别人的论文里找到要用的数据的原始数据自己做过滤 捣鼓了两天觉得代码太慢开始用pandas做处理 不得不说最大的感触就是 pandas 以及numpy在一定程度上在还原MA

    相关 排序数据_大数据推荐

    电子商务网站是个性化推荐系统重要地应用的领域之一,亚马逊就是个性化推荐系统的积极应用者和推广者,亚马逊的推荐系统深入到网站的各类商品,为亚马逊带来了至少30%的销售额。 不光

    相关 数据处理

    千万级数据处理 前言     近日一次版本上线时,涉及到千万级数据处理,因一时疏漏造成Oracle数据库回滚段爆掉,造成版本重复发布。     系统日常运行中,产