2009-02-06 4 views
5

Ich versuche eine eindeutige Liste auszuwählen, in der Duplikate über mehrere Felder erstellt werden. Zum BeispielWie wirkt sich die Verwendung von DISTINCT in SQL auf die Leistung aus?

SELECT tablename.field1Date, 
     tablename.field2Number, 
     tablename.field3Text 
FROM tablename; 

Wäre Duplizieren Datensätze über die Datum, Nummer und Textfelder jeweils.

Wenn ich jetzt verschiedene Datensätze auswähle, um das zu liefern, wonach ich suche, scheint die Performance drastisch zu sinken.

SELECT DISTINCT tablename.field1Date, 
       tablename.field2Number, 
       tablename.field3Text 
FROM tablename; 

Gibt es bekannte Gründe dafür? Ich muss zugeben, dass ich MS Access 2003 verwende, was möglicherweise das Problem ist.

Antwort

10

Ja, im Grunde muss es die Ergebnisse sortieren und dann erneut verarbeiten, um die Duplikate zu beseitigen. Diese Auslese könnte auch während der Sortierung durchgeführt werden, aber wir können nur darüber spekulieren, wie genau der Code im Hintergrund funktioniert. Sie könnten versuchen, die Leistung zu verbessern, indem Sie einen Index erstellen, der aus allen drei (3) Feldern besteht.

+0

Glauben Sie, dass es einen Unterschied in der Leistung zwischen einer Verbindung Index auf allen drei Feldern und einzelnen Indizes für jedes Feld ist? –

+0

Ich würde erwarten, dass es einige Verbesserungen geben würde. Andernfalls würde ein zusammengesetzter Index nur zur Sicherstellung der Eindeutigkeit verwendet, anstatt bei der Suche nach n-Tupeln zu helfen. – BIBD

1

Ja, die Anwendung muss jeden Datensatz mit dem "distinct" Records-Cache vergleichen, wie es geht. Sie können die Leistung verbessern, indem Sie einen Index verwenden, insbesondere für die numerischen und Datumsfelder.

+0

Die Operation, die Sie beschreiben, ist O (n²). Es ist daher wahrscheinlicher, dass die Antwort von CodeSlave korrekt ist, da das Sortieren nur O (n log n) und das Entfernen von Duplikaten aus einer sortierten Liste O (n) ist. –

4

Auf dieser Seite finden Sie Tipps zur Verbesserung der Abfrageleistung und einige Informationen zur Verwendung des Leistungsanalysators. Es wird Ihnen sagen, ob Indizes benötigt werden.

http://support.microsoft.com/kb/209126

Verwandte Themen