Announcement

Collapse
No announcement yet.

Interessante SQL-Anweiung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interessante SQL-Anweiung

    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
    Zuletzt editiert von Ulrich Berger; 10.05.2007, 11:50.

  • #2
    Da wird halt der SQL-Parser nicht intelligent genug sein um sowas zu erkennen.
    Gut wäre zu testen ob das auch noch bei neueren MS SQL-Servern der Fall ist.

    Comment


    • #3
      Hallo Uli,

      eine alte SQL-Weisheit: Gib der Abfrage soviele Parameter mit wie Du kannst, auch wenn es in diesem Fall "zweimal" das anscheinend gleiche ist, denn damit hilfst Du dem SQL-Server bei der optimalen Findung des passenden Ausführungsplans für diese Abfrage...

      Gruß
      Thomas

      Comment

      Working...
      X