Ich habe eine INSEE
Tabelle in meinem SQL Server 2008 R2. Ich habe einige doppelte Werte (15 000 Zeilen von 54 000 müssen gelöscht werden). Dies ist meine aktuelle SkriptOptimieren Sie SQL-Anfrage für doppelte Wert
declare @datainsee table
(
di_nom varchar(100),
di_departement varchar(5),
di_type varchar
)
declare @datainseeidentifiant table
(
dii_nom varchar(100),
dii_departement varchar(5),
dii_type varchar,
dii_identifiant uniqueidentifier
)
insert into @datainsee select iee_nom,iee_departement,iee_type from insee
group by iee_nom,iee_departement,iee_type
having(count(*)>1)
insert into @datainseeidentifiant
select di_nom,di_code,di_type,
(select top 1 iee_guid from insee where iee_departement=di_departement and iee_nom=di_nom and iee_type= di_type) from @datainsee
delete from insee
where iee_guid not in (select dii_identifiant from @datainseeidentifiant) and iee_nom in (select dii_nom from @datainseeidentifiant)
Zeilen gelten als duplizieren, wenn sie die gleiche iee_nom
, iee_departement
und iee_type
haben. Ich habe versucht, Lösungen wie T-SQL: Deleting all duplicate rows but keeping one zu suchen, aber es funktioniert nicht in meinem Fall, weil GUID
nicht Nummer ist.
Irgendwelche Ideen, um meine Abfrage zu optimieren? Eine Minute ist zu lang für meine Bewerbung.
Haben Sie eine automatisch generierte ID-Spalte in der Tabelle? –
Nein, Nur GUID als Uniqueidentifier. Nein Primärschlüssel keine ID .. Ich weiß, es ist schlecht, aber Anwendung wurde erstellt, bevor ich komme und es ist alte Version der Anwendung. –