Abfrage dauert ewig - MS SQL

Homer Simpson

Mitglied
Hallo zusammen,

ich habe eine Abfrage welche Telefonnummern aus Tabelle 1 mit Rufnummernblöcken aus Tabelle 2 vergleichen soll. Leider dauert meine Abfrage Ewigkeiten, was wohl am join liegt, aber wie kann ich es besser machen?

Hier ein Auszug aus der Abfrage, die Verknüpfung mit der dritten Tabelle klappt problemlos.
Code:
select count(c.Number) as Calls, sum(c.callduration) as Seconds
from callTable c
join Rufnummernbloecke b on (c.Number between b.Anfangsnummer and b.Endnummer)

Die Tabelle callTable enthält ca. 36 Millionen Einträge und die Tabelle Rufnummernbloecke ca 3,2 Millionen.

Grüße,
Markus

Edit: mit "Ewig" meine über 90 Stunden... dann habe ich abgebrochen.
 
Das einzige was mir spontan einfällt: auf die Spalten einen Index anlegen. Das sollte etwas schneller gehen.

Des weiteren: müssen denn immer alle Nummern abgeglichen werden? Reicht das nicht einmalig?

Außerdem ist das kein gewöhnlicher JOIN den du da machst - der ist eigentlich syntaktisch vollkommen inkorrekt (zumindest ahbe ich dies noch nie so gesehen). Du verknüpfst die Tabellen ja nicht miteinander anhand einer Beziehung.

Richtig müsste das eigentlich so aussehen:

SQL:
SELECT COUNT(c.Number) AS Calls, SUM(c.callduration) AS Seconds
FROM callTable c, Rufnummernbloecke b
WHERE c.Number BETWEEN b.Anfangsnummer AND b.Endnummer
Vielleicht bringt das ein paar Performance gewinne, mit dem Index auf den Spalten c.Number und c.callduration und evtl. auch auf b.Anfangsnummer und b.Endnummer.


Gruß Radhad
 
Zuletzt bearbeitet:
Hi Redhad,

danke für deine Antwort, ich habe mich um die Indizes gekümmert und das Skript so gestartet; es läuft inzwischen ca. 100 Stunden, brachte also auch keine Verbesserung
:eek:

Gibt es ein Skript welches mir anzeigt ob die Abfrage überhaupt noch aktiv ist? Ich habe so etwas mal bei Oracle-DB's gesehen...

bez. deiner Fragen:
Ja, ich benötige eine Aufstellung aller angerufenen Nummern, es reicht leider nicht einmalig.
 

Neue Beiträge

Zurück