Announcement

Collapse
No announcement yet.

Optimierung einer Abfrage

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

  • Optimierung einer Abfrage

    Hallo,

    ich habe ein Problem mit folgender Abfrage...

    Diese dauert extrem lange - praktisch kein Ergebnis.

    Allerdings ist sie dann doch recht schnell, wenn ich das <b>or</b> in <b>and</b> ändere.

    Kann mir jemand sagen, warum das so ist und wie ich die Abfrage beschleunigen kann o´hne das ich diese gross umbaue ?

    Die Abfrage wird durch eine Oberfläche generiert, daher sind die Umbaumöglichkeiten begrenzt.

    select *
    from view_Adressen where NID in
    (Select a.NID
    from t_Adressen a RIGHT OUTER JOIN T_MVerteiler d ON a.NID=d.FID
    WHERE (a.COMPANYNAME like 'a%')
    )
    <b>or</b> NID IN
    (Select a.NID from t_Adressen a RIGHT OUTER JOIN T_MVerteiler d ON a.NID=d.FID
    WHERE (a.COMPANYNAME like 'ak%')
    )

    (Server MS-SQL2000)

    Danke

  • #2
    Deine Abfrage ist deshalb grundsätzlich so langsam, weil du mit
    Sub-Queries arbeitest und diese für den Server sehr schlecht zu optimieren sind. Und da du mit 2 Subqueries arbeitest dauert dies entsprechend lange.

    Bei einem <b>OR</b> werden <b>immer beide</b> Subqueries ausgeführt, bei einem <b>AND</b> kann der SQL-Server <b>schon abbrechen</b>, wenn die erste Subquery kein Ergebnis liefert

    Comment


    • #3
      Hallo,

      ich habe auch nichts dagegen, das es etwas länger dauert, nur hier dauert es eine Stunde.

      Ausserdem soll Oracle das schneller hinbekommen !?

      Gibt es doch noch eine Möglichkeit hier etwas zu beschleunigen ?

      Danke

      Uw

      Comment


      • #4
        Die beste Möglichkeit wäre es die Query so umzuformulieren, dass die Subqueries vermieden werden.

        Evtl. solltest Du mal Profilingtools die Ausführung dieser Abfrage protokolieren. Beim MSSQL-Server könntest Du mit dem Query Analyser die Abfrage mal eingeben und mittels Menüpunkt Abfrage/Geschätzten Ausführungsplan anzeigen bzw. Indexanalyse den Ressourcenverbrauch genauer bestimmen

        Evtl. kannst Du mit Indexes oder ähnlichen Optimierung auf der DB die Leistung steigern. Oder was sehr oft bei Datenbanken hilft ist, einfach mehr RAM spendieren

        Comment


        • #5
          Da bekomme ich folgendes:

          Aus einem der folgenden Gründen wurden kenie Indizes empfohlen:
          1. Die Tabellen bestanden aus weniger als 10 Datenseiten.
          2. Indexunterstützung ist bereits vorhanden.
          3. Die Leistung hätte nur durch einen gruppierten Index verbessert werden können.

          Ich kann auch die abfrage selbst nicht ändern, da sie vollständig dynamisch erstellt wird und evtl. noch komplexere Varianten denkbar sind.

          Mir bleibt nichts anderes als den Server zu beschleunigen.

          cia

          Comment


          • #6
            Hallo Uwe,

            da wird dir nicht anderes übrig bleiben, als evtl. mehr Speicher in den Rechner zu installieren. Um mal abzuschätzen, was alles der SQL-Server abarbeiten muss, mal folgende Fragen:

            - Wieviel Speicher hat der Rechner?<br>
            - Wieviel Einträge und Spalten hat die Tabelle view_Adressen ?<br>
            - Wieviel Einträge und Spalten hat die Tabelle t_Adressen?<br>
            - Wieviel Einträge und Spalten hat die Tabelle T_MVerteiler?<br&gt

            Comment

            Working...
            X