Pertama, Anda dapat mencoba menambahkan indeks ke bidang ProgramName dan CustID jika Anda belum memilikinya.
De-Duping
Anda dapat mengelompokkan catatan Anda untuk mengidentifikasi penipuan, dan saat Anda melakukannya, ambil nilai ID minimum untuk setiap grup. Kemudian, hapus saja semua record yang ID-nya bukan salah satu dari MinID.
Metode Dalam Klausul
delete from
ProgramsList
where
id not in
(select min(id) as MinID
from ProgramsList
group by ProgramName, CustID)
Metode Gabung
Anda mungkin harus menjalankan ini lebih dari sekali, jika ada banyak anggota per grup.
DELETE P
FROM ProgramsList as P
INNER JOIN
(select count(*) as Count, max(id) as MaxID
from ProgramsList
group by ProgramName, CustID) as A on A.MaxID = P.id
WHERE A.Count >= 2
Beberapa orang memiliki masalah kinerja dengan In-Clause, beberapa tidak. Itu sangat tergantung pada indeks Anda dan semacamnya. Jika yang satu terlalu lambat, coba yang lain.
Terkait:https://stackoverflow.com/a/4192849/127880