当前位置: 代码迷 >> Oracle管理 >> 5千万数据 表中,删除sql
  详细解决方案

5千万数据 表中,删除sql

热度:102   发布时间:2016-04-24 04:13:18.0
5千万数据 表中,求一个删除sql
本帖最后由 student_2008 于 2014-10-15 21:21:20 编辑


--代理信息
create table FD_PROXY_INFO(

ID VARCHAR(32) NOT NULL,
PROXY_IP VARCHAR(19),
PROXY_PORT number,
        CREATE_TIME DATE,
CONSTRAINT PK_FD_PROXY_INFO PRIMARY KEY (ID)
);


--代理信息明细
    CREATE TABLE FD_PROXY_INFO_STATUS(
     ID VARCHAR(32) NOT NULL,
PROXY_IP VARCHAR(19),
PROXY_PORT number,
        CREATE_TIME DATE,
        CONSTRAINT FD_PROXY_INFO_STATUS PRIMARY KEY (ID)
    );

--俩个表总数据量约5千万
--删除代理明细中不存在的代理记录,目前这样执行速度忑慢了。有没有好的办法可以让速度快一点,
delete from FD_PROXY_INFO
where proxy_ip not in(
select proxy_ip from FD_PROXY_INFO_STATUS
where 1=1
and to_char(CREATE_TIME,'yyyy-MM')='2014-08'
)

------解决思路----------------------
仅就当前语句来说
FD_PROXY_INFO_STATUS 应该建proxy_ip,to_char(CREATE_TIME,'yyyy-MM')的组合函数索引
也可调整查询条件,改为
CREATE_TIME>=to_date('2014-08-01','yyyy-mm-dd') and CREATE_TIME<to_date('2014-09-01','yyyy-mm-dd')
创建proxy_ip,CREATE_TIME的组合索引
------解决思路----------------------
to_char(CREATE_TIME,'yyyy-MM')='2014-08' 这样很难用到索引
建议用CREATE_TIME=to_date('','');
  相关解决方案