哦,你要是不嫌方法笨的话,这个方法有改进余地: 1.你在原始表的时间上建索引了吗? 2.你在建各个中间表时不要有索引,数据灌入后再建合适的索引 如果都做了的话,应该速度是不错的,除非系统的IO太慢了。 PS:建索引时开大SORT_AREA_SIZE了吗? alter session set sort_area_size=20000000;
3.交换数据: alter table t exchange partition part1 with table temp_1 without validation alter table t exchange partition part2 with table temp_2 without validation ...
1.你在原始表的时间上建索引了吗?
2.你在建各个中间表时不要有索引,数据灌入后再建合适的索引
如果都做了的话,应该速度是不错的,除非系统的IO太慢了。
PS:建索引时开大SORT_AREA_SIZE了吗?
alter session set sort_area_size=20000000;
2,临时表是SELECT时候INTO生成的
一个表处理下来要几个小时,一共100多个这样的表,所以效率很重要
中间表不是create ... as select 或 create 完用insert into的吗?
还有中间表的索引不知你建了没有?
我也做过类似的处理,数据量比这个多,在COMPAG DS20或SUN E250这些
低端的机子上跑也没超过1个小时啊
用CURSOR会不会很慢?
100多个表,汗!水平有限,估计帮不了你什么了。
期待高手有啥别的方法。
不知道并行查询的帮助有多大
create table a
CREATE TABLE sales_range
(
salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_amount NUMBER(10),
sales_date DATE,
PRIMARY KEY(sales_date, salesman_id))
ORGANIZATION INDEX INCLUDING salesman_id
PARTITION BY RANGE(to_char(time,'hh24'))
(PARTITION p1 VALUES LESS THAN(1),
PARTITION p2 VALUES LESS THAN(2),
partition p3 values less than(3),
...
partition p24 values less than(24));
呵呵,不过改动比较大,不知道楼主有没有这个权利和时间来做
楼主如果连分区表的概念都很模糊的话,还是算了吧...
基本思路: 1.创建一个空的带分区的表,分区规则可以参照 beckham前面提到的; 2.创建用于交换的临时表: temp_1,temp_2,...可参照isaacchang的
方案;
3.交换数据:
alter table t
exchange partition part1
with table temp_1
without validation alter table t
exchange partition part2
with table temp_2
without validation ...
刚刚看到一篇文章,不知道有没有用啊!
每个表的数据量小不了多少,还不如表里加上一个字段state_time
按照时间更新为1-24
效率会提高些
参考以下:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c12parti.htm#464767