大表之困惑 - 数据建模的前期规划十分重要

这几天被一个数据库中的大表所困扰,这是一个插入非常频繁的数据表,该表目前大约有20亿记录,是一个分区表:

SQL> SELECT TABLE_NAME,NUM_ROWS,BLOCKS,AVG_SPACE,SAMPLE_SIZE,LAST_ANALYZED
  2  FROM DBA_TABLES WHERE OWNER='SMS' AND TABLE_NAME='SSMG';

TABLE_NAME                       NUM_ROWS     BLOCKS  AVG_SPACE SAMPLE_SIZE LAST_ANALYZE
------------------------------ ---------- ---------- ---------- ----------- ------------
SSMG                           2000426788   60053382          0   101416650 12-SEP-09

然而这个表上建有的都是全局索引,现在需要按照跟索引基本无关的条件进行删除,以下几个索引都无可利用:

SQL> select
  2      INDEX_NAME,BLEVEL,LEAF_BLOCKS,DISTINCT_KEYS,
  3      NUM_ROWS,CLUSTERING_FACTOR,last_analyzed
  4  from
  5      dba_indexes t
  6  where
  7      table_name = 'SSMG'
  8  and table_owner = 'SMS'
  9  /

INDEX_NAME                   BLEVEL LEAF_BLOCKS DISTINCT_KEYS   NUM_ROWS CLUSTERING_FACTOR LAST_ANALYZE
------------------------ ---------- ----------- ------------- ---------- ----------------- ------------
IDX_SMS_DEST_MDN                3    12186077      19507227 2071388105        1816174507 12-SEP-09
IDX_SMS_SERVICE_ID              3     8184696            48 1990938187         113031962 12-SEP-09
UN_SMS                          4    21717598    1973096899 1973096899         138625843 12-SEP-09

客户写了个Loop循环,通过另外一个表的关联去判断删除,另外一个表具有400万记录,初步计算了一下程序效率,跑完一次大约要200天。

好了,现在的问题是,要么面对不可能,要么建个索引,加快处理,可是在20亿上建一个索引,即便是Online的方式,对应用的性能也会有几大的影响。

要么很复杂的去处理,要么很慢的去处理,当初如果多加个索引,该有多好啊!

转载于:https://my.oschina.net/90888/blog/830784

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值