Oracle如何快速操做千万级大表数据

Oracle如何快速操做千万级大表数据:
html

无论Oracle有多牛,一个上千万级记录数据的表操做起来仍是很慢,是超级慢.最近公司处理一个接近一亿记录数的表,须要按时间删除前几个月的数据,这个就头疼了.就是统计此表的总记录数都要处理10多分钟,更不用说根据时间条件去删除数据了.如今说说我在操做大表时遇到的问题吧.sql

1.删除数据很是慢oracle

刚开始我使用的是这个sql:性能

delete from sun_log_access_2016 where time<to_date('2016-7-1','YYYY-MM-DD');spa

这就是告诉oracle我要删除7月份以前的全部数据,oracle在处理这个sql的时候会去遍历那一亿数据(这就会花费一大部分时间),在遍历的事就计算每条记录的time而后判断,判断晚了以后再删除.在删除的过程当中oracle还要记录redo日志(此日志是为了恢复删除的数据),这也须要花费大量的时间,若表中有索引,在删除的过程当中oracle还要维护索引,这也会占用大量的性能..net

用此sql在一亿数据中删除300万数据须要一两百分钟(可怕呀!!!)日志

2我修改后的删除方案htm

使用此sql:blog

delete from sun_log_access_2016 nologging where time<to_date('2016-7-1','YYYY-MM-DD');
索引

指定nologging关键字,让oracle不记录日志

删除此表的索引(删除完了以后从建索引)

用此sql在一亿数据删除300万数据只须要10多分钟(这就是效率)


在删除过程当中若是一次性删除数据量过大则会抛出undo异常,关注此博客->

http://blog.csdn.net/admin1973/article/details/54693066


查看oracle表空间使用状况:

http://www.cnblogs.com/askjacklin/archive/2012/06/04/2534571.html

查看oracle nologging关键字:

http://blog.csdn.net/sdl_ok/article/details/5474774

oracle删除千万级数据:

http://blog.sina.com.cn/s/blog_70b55b1a0100y5ek.html