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
还是在全表扫描 ,求高手指点!
------解决方案--------------------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',