|
如何删除数据库中的冗余数据(翻译) (13) 1017 Krieger Jeff 1010 Simon Michael 1011 Stone Tony 1014 Stone Tony 1016 Stone Tony 1019 Stone Tony
7 rows selected.
这显示有七行需要删除,还是用上一个表我测试了一下这个代码,它用了77秒种就删除了所有的数据准备好了用Sql语句来删除冗余数据,版本一它执行了135秒
DELETE FROM CUSTOMERS WHERE ID IN (SELECT ID FROM (SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName, FirstName ORDER BY ID) AS SeqNumber FROM Customers) WHERE SeqNumber > 1); 我们可以看到最后的两行语句对表中的数据进行了排序,这不是有效的,所以我们来优化一下最后一个查询语句,把Rank()函数应用到只含有冗余数据的组,而不是所有的列 下面这个语句是比较有效率的,虽然它不像上一个查询那样精简 SELECT ID, LastName, FirstName FROM (SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName, FirstName ORDER BY ID) AS SeqNumber FROM (SELECT ID, LastName, FirstName FROM Customers WHERE (LastName, FirstName) IN (SELECT LastName, FirstName FROM Customers GROUP BY LastName, FirstName
|