oracle 删除重复记录的高效方法 && mysql 删除重复记录方法
2009年02月12日 星期四 16:45
COL1中有重复记录(COL1,COL2为主键),如何删除 1、有少数重复记录(在col1,col2上有索引比较好) DELETE T WHERE (COL1,COL2) IN (SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1) 2、大部份记录有重复记录 DELETE T WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2) 3、其他写法 DELETE T WHERE ROWID IN (SELECT A.ROWID FROM T A,T B WHERE A.COL1=B.COL1 AND A.COL2 = B.COL2 AND A.ROWID > B.ROWID) ###################################### 10. 删除重复记录 最高效的删除重复记录方法 ( 因为使用了ROWID) DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); 11. 用TRUNCATE替代DELETE 当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是 恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML) 12. 尽量多使用COMMIT 只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少: COMMIT所释放的资源: a. 回滚段上用于恢复数据的信息. b. 被程序语句获得的锁 c. redo log buffer 中的空间 d. ORACLE为管理上述3种资源中的内部花费
mysql 删除重复记录
如果数据库的设计不规范,某个表没有主健,那么肯定会有重复记录的现象,或者存在这种危险。在oracle中,可以通过rowid来删除重复记录,而mysql如何实现呢: 1、准备基表test,待测试。 create table test (c1 smallint,c2 smallint); insert into test values(1,1); insert into test values(1,1); insert into test values(1,2); insert into test values(2,2); insert into test values(2,2); 2、创建一个临时表,结构与原表一致,但没有数据。 create table tmp as select * from test where 1=2; 3、将原表数据插入临时表,重复记录合为一条记录。 insert into tmp select distinct * from test; 4、查看一下基表和临时表的数据。 mysql> select * from test; +------+------+ | c1 | c2 | +------+------+ | 1 | 1 | | 1 | 1 | | 1 | 2 | | 2 | 2 | | 2 | 2 | +------+------+ 5 rows in set (0.00 sec) mysql> select * from tmp; +------+------+ | c1 | c2 | +------+------+ | 1 | 1 | | 1 | 2 | | 2 | 2 | +------+------+ 3 rows in set (0.00 sec) 5、删除基表数据 mysql> delete from test; Query OK, 5 rows affected (0.02 sec) 6、将临时表数据插回基表 mysql> insert into test select * from tmp; Query OK, 3 rows affected (0.03 sec) Records: 3 Duplicates: 0 Warnings: 0 7、查看一下基表的数据 mysql> select * from test; +------+------+ | c1 | c2 | +------+------+ | 1 | 1 | | 1 | 2 | | 2 | 2 | +------+------+ 3 rows in set (0.00 sec) 8、数据准确,完成基表重复记录的删除。 方法二: INSERT INTO "tables1" SELECT name,id FROM "tables" GROUP BY name 借用一个中间表~ 把不复的数据先复制到中间表,再将原表删除,并且将中间表修名成现有表~ 不过INSERT INTO 表 SELECT 这种语法适合mysql4.0以上版本 方法三:(本人经常使用的,特别表大的情况,此法算是效率比较高的了) 新建一个临时表 create table tmp as select * from youtable group by name 删除原来的表 drop table youtable 重命名表 alter table tmp rename youtable
|
分享到:
相关推荐
19、说明:删除重复记录 Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 20、说明:列出数据库里所有的表名 select name from sysobjects where type='U' 21、...
使用数据表样式的网格查看以及一系列数据编辑工具来添加、修改和删除记录,方便你编辑数据。Navicat 为你提供有效管理数据所需的工具,并确保能顺利进行。 简单的 SQL 编辑 视觉化 SQL 创建工具助你创建、编辑和运行...
实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 76 实例061 格式化当前日期 77 实例...
Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...
Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...
SubmitOncePage:解决刷新页面造成的数据重复提交问题 SharpRewriter:javascript + xml技术利用#实现url重定向 采用XHTML和CSS设计可重用可换肤的WEB站点 asp.net的网址重定向方法的比较:面向搜索引擎友好 也谈 ...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...