日期:2014-05-16  浏览次数:20730 次

oracle分区索引问题
我创建了1个普通表;一个分区表,分区表按月份划分了2个区。然后分别在普通表创建索引,在分区表上分别创建全局和本地索引。跨分区,查询了8千万条数据进行性能测试。可是得出的结果却是使用了全局索引的分区表,要比使用本地索引的分区表和普通表的效率还要低。按常理说,如果跨分区查数据的话,使用全局索引的分区表要比使用局部索引的分区表的效率高阿,高手们这是怎么回事阿??
=========================
分区表:
CREATE TABLE TABLE_PARTITION(
  USERID VARCHAR2(256 BYTE) NOT NULL, 
  USERNAME VARCHAR2(256 BYTE) NOT NULL,
  AGE NUMBER(10) NOT NULL,
  SEX VARCHAR2(256 BYTE) NOT NULL,
  BIRTHDAY DATE NOT NULL,
  TEST1 VARCHAR2(256 BYTE) NOT NULL,
  TEST2 VARCHAR2(256 BYTE) NOT NULL,
  TEST3 VARCHAR2(256 BYTE) NOT NULL,
  TEST4 VARCHAR2(256 BYTE) NOT NULL
)
PARTITION BY RANGE (BIRTHDAY) 

PARTITION ORD_PART01 VALUES LESS THAN (to_date('2011-02-01','yyyy-mm-dd')) TABLESPACE PARTITIONSPACE_A,
PARTITION ORD_PART02 VALUES LESS THAN (to_date('2011-03-01','yyyy-mm-dd')) TABLESPACE PARTITIONSPACE_B
)
========================
分区全局索引:
 CREATE INDEX IDX_GLOBAL_PARTITION_BIRTHDAY
ON TABLE_PARTITION(BIRTHDAY)
GLOBAL PARTITION BY RANGE (BIRTHDAY)
(
PARTITION I_ORD_PART01 VALUES LESS THAN (to_date('2011-02-01','yyyy-mm-dd')) TABLESPACE PARTITION_INDEX_SPACE,
PARTITION I_ORD_OTHER VALUES LESS THAN (MAXVALUE) TABLESPACE PARTITION_INDEX_SPACE_B
);
===========================
分区本地索引:
CREATE INDEX IDX_LOCAL_PARTITION_BIRTHDAY ON TABLE_PARTITION(BIRTHDAY) 
LOCAL (PARTITION I_ORD_PART01 TABLESPACE PARTITION_INDEX_SPACE,
PARTITION I_ORD_PART02 TABLESPACE PARTITION_INDEX_SPACE_B
);
===========================
sql测试语句:
select count(*) from TABLE_PARTITION where (BIRTHDAY > to_date('2011-01-03','yyyy-mm-dd') and BIRTHDAY < to_date('2011-02-12','yyyy-mm-dd'));
============================
大虾们帮帮忙阿!!!!

------解决方案--------------------
对于分区表索引的查询,本地分区表和普通表效率低;
跨分区查数据的话,使用全局索引的分区表要比使用局部索引的分区表的效率高,
全局索引的话从整张表考虑的,而局部索引的从某个字段考虑的,具体要看执行
计划才能看出那个效率比较低的。