2010-07-06 7 views
6

Diese Abfrage dauert etwa eine Minute Ergebnisse zu geben:Gibt es einen Grund, warum diese einfache SQL-Abfrage so langsam sein sollte?

SELECT MAX(d.docket_id), MAX(cus.docket_id) FROM docket d, Cashup_Sessions cus 

Doch diese:

SELECT MAX(d.docket_id) FROM docket d UNION MAX(cus.docket_id) FROM Cashup_Sessions cus 

gibt sofort seine Ergebnisse. Ich kann nicht sehen, was der erste tut, der so viel länger dauern würde - ich meine, sie beide überprüfen einfach die gleichen zwei Listen von Zahlen für den größten und geben sie zurück. Was könnte es sonst noch tun, was ich nicht sehen kann?

Ich benutze Jet SQL auf einer MS Access-Datenbank über Java.

+0

'Jet SQL auf einem MS Access' <- Meine Augen! Die Brille! Die machen nichts! –

+0

Ich vermute, Sie meinen, dass Jet eine etwas unzureichende Technologie ist. Wie du sehen kannst, bin ich ein Anfänger, der sich selbst im Dunkeln unterrichtet - wenn du ein wenig auf diesen Kommentar eingehen könntest, würde ich es schätzen, weil es mir helfen kann, die Größe/Vernunft der Aufgabe zu verstehen, die ich unternehme. – Jack

Antwort

13

der erste macht einen Cross-Join zwischen 2 Tabellen, während der zweite nicht ist.
das ist alles, was es ist.

+0

OK. Ein Komma bedeutet also eine Kreuzverbindung. Danke an alle, die sich die Zeit genommen haben, darauf hinzuweisen. Wird jetzt mehr Zeit mit den "begining sql" -Büchern verbringen. – Jack

+0

Das Komma impliziert einen Join, es ist nur ein Cross-Join, weil es keine WHERE-Klausel gibt, um die Tabellen zu verbinden. – airmanx86

9

Der erste verwendet ein kartesisches Produkt, um Quelldaten zu bilden, was bedeutet, dass jede Zeile aus der ersten Tabelle mit jeder Zeile aus der zweiten Tabelle gepaart wird. Danach durchsucht es die Quelle, um die Maximalwerte aus den Spalten herauszufinden.

Der zweite verbindet keine Tabellen. Es findet nur max von der ersten Tabelle und die maximale von der zweiten Tabelle und gibt dann zwei Zeilen zurück.

3

Die erste Abfrage führt einen Kreuz-Join zwischen den Tabellen durch, bevor die Maximalwerte abgerufen werden, dh jeder Datensatz in einer Tabelle wird mit jedem Datensatz in der anderen Tabelle verknüpft.

Wenn Sie zwei Tabellen mit jeweils 1000 Elementen haben, erhalten Sie ein Ergebnis mit 1000000 Elementen, die durchlaufen werden müssen, um das Maximum zu finden.

Verwandte Themen