首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

ORACLE 建立的表,索引失效,求

2013-07-09 
ORACLE 建立的表,索引失效,求高手指点建立了一个表E_MP_DAY_READ,大约有200万的记录数create table E_MP_D

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_ROWS238085332823
 TABLE ACCESS FULLE_MP_DAY_READ2380853328231
还是在全表扫描 ,求高手指点!
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',


                                     cascade          => TRUE);
END;
[解决办法]
索引损坏了,重新建索引。
必须先删除原来的索引
drop index IDX_E_MP_DAY_READ_DATA 
在重新创建索引
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
  );

[解决办法]
重新分析下这个表吧,重新统计信息
analyze table E_MP_DAY_READ compute statistics;

热点排行