日期:2014-05-17  浏览次数:20887 次

ORACLE 建立的表,索引失效,求高手指点
建立了一个表E_MP_DAY_READ,大约有200万的记录数
create table E_MP_DAY_READ
(
  id        NUMBER(16) not null,
  data_date DATE not null,
  col_time  DATE not null,
  pap_r     NUMBER(11,4),
  pap_r1    NUMBER(11,4)

也建立了索引
create index IDX_E_MP_DAY_READ_DATA on E_MP_DAY_READ (DATA_DATE)
  tablespace SCND
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
create index IDX_E_MP_DAY_READ_ID on E_MP_DAY_READ (ID)
  tablespace SCND
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

但 SELECT * FROM E_MP_DAY_READ E WHERE E.DATA_DATE= to_date('2013-05-25','yyyy-MM-dd') 时,PL/SQL的解释计划中,还显示 
SELECT STATEMENT, GOAL = ALL_ROWS 23 808 53328 23
 TABLE ACCESS FULL E_MP_DAY_READ 23 808 53328 23 1
还是在全表扫描 ,求高手指点!
Oracle 索引

------解决方案--------------------
1.看下 这个语句查询的记录数占总数的多少?
SELECT count(1) FROM E_MP_DAY_READ E ;
SELECT count(1) FROM E_MP_DAY_READ E WHERE E.DATA_DATE= to_date('2013-05-25','yyyy-MM-dd');

2.如果占的比例不高,还不走索引,那就如楼上所说,分析下表
BEGIN
  EXEC dbms_stats.gather_table_stats(ownname          => 'TEST',
                                     tabname          => 'E_MP_DAY_READ',