这几天被一个数据库中的大表所困扰,这是一个插入非常频繁的数据表,该表目前大约有20亿记录,是一个分区表:
然而这个表上建有的都是全局索引,现在需要按照跟索引基本无关的条件进行删除,以下几个索引都无可利用:
好了,现在的问题是,要么面对不可能,要么建个索引,加快处理,可是在20亿上建一个索引,即便是Online的方式,对应用的性能也会有几大的影响。
要么很复杂的去处理,要么很慢的去处理,当初如果多加个索引,该有多好啊!
-The End-
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客户写了个Loop循环,通过另外一个表的关联去判断删除,另外一个表具有400万记录,初步计算了一下程序效率,跑完一次大约要200天。
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
好了,现在的问题是,要么面对不可能,要么建个索引,加快处理,可是在20亿上建一个索引,即便是Online的方式,对应用的性能也会有几大的影响。
要么很复杂的去处理,要么很慢的去处理,当初如果多加个索引,该有多好啊!
-The End-
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




