关于oracle分区表的查询性能问题
我有一张大表,有70多个字段,其中一个字段是recvtime时间字段(整型时间)。因为这张表的数据量很大,所以考虑使用partition进行分区,以recvtime字段,按月分区,语句如下:
CREATE TABLE t_a
(
id VARCHAR2 (16 BYTE) NOT NULL,
recvtime INTEGER NOT NULL,
ipaddress integer,
...
)
PARTITION BY RANGE (RECVTIME)
(PARTITION t_a_201109
VALUES LESS THAN (1317398400), --2011-10-01
PARTITION t_a_201110
VALUES LESS THAN (1320076800),
PARTITION t_a_201111
VALUES LESS THAN (1322668800),
PARTITION t_a_residual
VALUES LESS THAN (maxvalue))
/
其中recvtime字段创建了索引,id是主键。
问题如下:
目前该表中有500万数据,我想要查询10月10日到10月17日的数据。在没有创建分区的同样结构的表中,查询速度大概33秒(从500万数据中查询出6万),而在创建了分区的表中,查询速度却要需要50秒。
1.为什么会这样?创建分区的表的查询速度应该更快啊?
2.分区表的查询语句:
SELECT *
FROM t_a PARTITION (t_a_201110)
WHERE recvtime >= 1318176000
AND recvtime < 1318780800
AND ...(其他条件)
这个语句和不添加PARTITION (t_a_201110)的查询语句,在查询性能查询的执行过程上有区别吗?需要人为指定查询的分区吗?还是oracle能够自动根据recvtime的条件判断需要查询的分区呢?
ps:我是在工作机上做的测试(笔记本),xp系统,oracle11g
麻烦高手指点,谢谢
------解决方案--------------------正常来讲分区对用户来讲应该是透明的。
可以试一下在查询时指定分区,再测试一下时间。
SQL code
SELECT * FROM 表名 PARTITION(分区名);
------解决方案--------------------
如果数据分布在多个分区,涉及数据的递归调用问题,比不分区还要慢。