当前位置: 代码迷 >> Oracle管理 >> 600W数据表删除数据,求优化,该如何处理
  详细解决方案

600W数据表删除数据,求优化,该如何处理

热度:109   发布时间:2016-04-24 04:13:13.0
600W数据表删除数据,求优化
--信息明细
    CREATE TABLE FD_INFO_STATUS(
     ID VARCHAR(32) NOT NULL,
P1 VARCHAR(19),
p2 number,
        CREATE_TIME DATE,
        CONSTRAINT FD_INFO_STATUS PRIMARY KEY (ID)
    );

表记录余约600W
现在想删除某天,p2=9999的记录,运行sql的时候发现特别慢,求优化

delete from FD_INFO_STATUS a
where 1=1
and p2=9999
and to_char(CREATE_TIME,'yyyy-MM-dd')='2014-08-17'
and id in(
select id from FD_INFO_STATUS where 1=1
and to_char(CREATE_TIME,'yyyy-MM-dd')='2014-08-17'
and p2=9999
)
------解决思路----------------------
id是主键吧,这个语句看起来条件重复了

delete from FD_INFO_STATUS a
where  p2=9999
and CREATE_TIME>=to_date('2014-08-17','YYYY-MM-DD')
and CREATE_TIME<to_date('2014-08-18','YYYY-MM-DD');

如果该表存的是好几天的数据,那么,在create_time字段上创建索引可以起到不错的效果
------解决思路----------------------
如果想利用现在的CREATE_TIME的索引,需要把条件改为
CREATE_TIME>=to_date('2014-08-17','yyyy-mm-dd') and CREATE_TIME<to_date('2014-08-17','yyyy-mm-dd')+1

或是直接给to_char(CREATE_TIME,'yyyy-MM-dd')建函数索引
  相关解决方案