Hallo,
ich möchte folgendes SQL-Statement zur Diskussion stellen:
SELECT * FROM Auftrag
INNER JOIN Schaden ON (Auftrag.SYS_S_NR = Schaden.SYS_NR) AND (Auftrag.S_NR = Schaden.S_NR)
WHERE
(Auftrag.EDI_VERS=1) AND (Auftrag.KUNDEN_ID = '428')
-- um diese Zeile geht es:
And (Schaden.KUNDEN_ID = '428')
AND ((Schaden.S_Hoehe_Kz<>1) AND (Schaden.S_Hoehe_Kz_M<>1))
Die markierte Zeile ist streng genommen redundant, da die Kunden_ID immer in beiden Tabellen gleich ist. Jedoch geht das Öffnen der Abfrage mit dieser zusätzlichen Zeile etwa um den Faktor 3 schneller.
Ein paar zusätzliche Informationen: auf den abgefragten Feldern liegt in beiden Tabellen jeweils ein Index (Im Fall der Tabelle "Schaden" ist dies der Primärschlüssel).
Natürlich enthalten beide Tabellen noch etliche Felder mehr...
Jemand eine Erklärung, wie eine eigentlich redundante SQL-Anweisung die Abfrage dermaßen beschleunigen kann?
Noch ein Hinweis: Falls das eine Rolle spielt, es handelt sich um den MS Sql-Server 7.0
Gruß Uli
ich möchte folgendes SQL-Statement zur Diskussion stellen:
SELECT * FROM Auftrag
INNER JOIN Schaden ON (Auftrag.SYS_S_NR = Schaden.SYS_NR) AND (Auftrag.S_NR = Schaden.S_NR)
WHERE
(Auftrag.EDI_VERS=1) AND (Auftrag.KUNDEN_ID = '428')
-- um diese Zeile geht es:
And (Schaden.KUNDEN_ID = '428')
AND ((Schaden.S_Hoehe_Kz<>1) AND (Schaden.S_Hoehe_Kz_M<>1))
Die markierte Zeile ist streng genommen redundant, da die Kunden_ID immer in beiden Tabellen gleich ist. Jedoch geht das Öffnen der Abfrage mit dieser zusätzlichen Zeile etwa um den Faktor 3 schneller.
Ein paar zusätzliche Informationen: auf den abgefragten Feldern liegt in beiden Tabellen jeweils ein Index (Im Fall der Tabelle "Schaden" ist dies der Primärschlüssel).
Natürlich enthalten beide Tabellen noch etliche Felder mehr...
Jemand eine Erklärung, wie eine eigentlich redundante SQL-Anweisung die Abfrage dermaßen beschleunigen kann?
Noch ein Hinweis: Falls das eine Rolle spielt, es handelt sich um den MS Sql-Server 7.0
Gruß Uli
Comment