不知道各位同学有没有遇到这样的痛苦:当数据库里的数据量级很大很大的时候,发现里面很多重复的数据,这个时候用常规语句写法去删除的时候,效率非常低。
其实,SQLSERVER里自从SQL2005以后已经提供了很多系统函数,可以方便快速的处理。
可以使用 ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)
解释一下:表示根据COL1分组,在分组内部根据 COL2排序
函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
举个例子,就非常清楚明白了。
WITH TEST AS
(
SELECT ROW_NUMBER()
OVER(PARTITION BY col1,col2,col3 order by col4)
AS NUM,* FROM table1
)
--只保留num=1的记录,重复的删除
DELETE FROM TEST WHERE NUM != 1经测试,效率非常高。有兴趣的同学可以尝试一下。