关于删除表内重复记录的问题

[复制链接]
查看11 | 回复9 | 2007-6-28 08:52:11 | 显示全部楼层 |阅读模式
下面是我现在执行的SQL,请问有没有效率更高的方法?
delete from my_table1 where rowid not in (select min(rowid) from my_table1 group by id) and rownum <【删除的记录数】;
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
需要说明的是:该表记录数很大,接近有7亿条,delete里面的分组查询统计占用时间较长。
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
我上天删除七亿条. 先把索引下了. 然后使用在线重组功能.OnLine
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
呵呵,这里没有空间做在线重组啊。
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
重建一個表,把數據插入,刪除原表
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
新建一个表(有唯一性索引),然后把数据一点一点导过去。
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
主要是没有那么大的空间重建表了。
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
id上面建索引,然后用这样的语句
delete from my_table1 a where rowid<(select max(rowid) from my_table1 b where b.id=a.id)
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
楼上的好像没写完吧?我已经在分组的字段上建了索引。
回复

使用道具 举报

千问 | 2007-6-28 08:52:11 | 显示全部楼层
ctas之后,删除元表,速度要快甚多,你这样直接delete光是undo和redo就要产生好大一堆的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行