Announcement

Collapse
No announcement yet.

Frage zu einer Peformance-Steigerung oder Abfrage-Vereinfachung

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

  • Frage zu einer Peformance-Steigerung oder Abfrage-Vereinfachung

    Hallo,
    <br>
    es geht um folgende Abfrage:
    <br><br>
    <B>SELECT ISNULL</B>(<B>SUM</B>(dbo.tableA.field1*dbo.tableB.field1),0) <B>AS</B> Expr <br><B>FROM</B> dbo.tableB <br><B>INNER JOIN</B> dbo.tableA <B>ON</B> dbo.tableB.field2 = dbo.tableA.field0 <br><B>INNER JOIN</B> dbo.tableC <B>ON</B> dbo.tableB.field3 = dbo.tableC.field0 <br><B>WHERE</B> (dbo.tableB.field1 > 0) <B>AND</B> (dbo.tableC.field1 = 34)
    <br><br>
    kann mir jemand einen Tipp zur Vereinfachung geben oder sollte dies die, für die Performance, beste Lösung sein?

  • #2
    Beim Tuning kommt es auch immer sehr auf die Daten und die Indiezes an...

    Aber vielleicht bringt es etwas wenn man zuerst die Menge selektiert (ohne SUM) und dann auf diese Menge das SUM legt. Einfach mal testen.

    Viel Erfolg

    Frank Wei&#223

    Comment


    • #3
      hallo,<br>
      einen tipp hab ich auch noch:<br>
      joins sind immer kostenintensiv - statt dessen sollte die verknüpfung in der where-klausel stehen.<br>
      so wird aus: <br>
      select t2.s1<br>
      from tabelle1 t1 inner join tabelle2 t2 on t1.ind = t2.ind<br>
      where t1.key = xyz<br>
      <br>
      select t2.s1<br>
      from tabelle1 t1, tabelle2 t2 <br>
      where t1.ind = t2.ind and t1.key = xyz<br&gt

      Comment


      • #4
        Dann will ich auch nochmal

        probier auch zuerst die Verknüpfung mit der kleinsten Tabelle zu machen. Guck mal wieviel "Nested LOOPs" Du in Deiner SQL-anweisungun hast. Alle "FULL TABLE SCANNS" sollten eliminiert werden.

        Viel Erfolg

        Fran

        Comment


        • #5
          Hallo Cornelia,

          ich denke nicht das die Lösung mittels inner join (grundsätzlich) langsamer ist als dein Vorschlag. Ich denke eher das der inner join i.d.R. schneller ist als die where Bedingung.

          Ich habe beide SQL-Anweisung auf einer MS-SQL-Datenbank per SQL Query Analyser auf den Ausführungsplan untersucht und keinen Unterschied festgestellt. Die 2te Anweisung wird von der Datenbank in einen Inner-Join überführt und dann ausgeführt

          Comment


          • #6
            @Bernhard:

            Ich denke da hast Du recht, wollte es hier aber nicht so deutlich sagen

            @S. Schmidt:
            Aber Stimmt: Hast Du jetzt eigentlich noch Infos über Tabellengröße- struktur und DB-Typ? Ich hatte einfach mal so angenommen, daß es Oracle ist......

            Laß hören!:

            Viele Grüße

            Fran

            Comment


            • #7
              Hi,

              eventuell kann man durch Indexierung der Felder noch Performance gewinnen.
              Sollte man aber mit Vorsicht einsetzen, der Index muß auch erstellt werden und (von der Datenbank) gepflegt werden.
              Wird also zu längeren Ausführungszeiten beim
              Einfügen und Ändern von Datensätzen führen.

              (Ich hoffe, das ist kein überflüssiger Kommentar)

              Grüße

              Joche

              Comment


              • #8
                hui, erst dachte ich es kommen keine Antworten und dann doch so viele.. Danke.
                <br><br>
                Also es handelt sich hierbei um einen MS-SQL-Server 2000
                ... ein Index ist noch nicht festgelegt (leider müsste ich, Abhängig von der Abfrage (speziell der Where-Klausel) jedes Feld der Datenbank indizieren)... es werden mehrere Abfragen dieser Art getätigt nur mit anderen Feldern der Tabelle<br><br> die Tabellen-Größe sind mehrere Tausend Datensätze.. die für den Sum-Ergebnis-Ausdruck verwendeten Datensätze sind um die 10

                Comment


                • #9
                  hui, erst dachte ich es kommen keine Antworten und dann doch so viele.. Danke.
                  <br><br>
                  Also es handelt sich hierbei um einen MS-SQL-Server 2000 ... ein Index ist noch nicht festgelegt (leider müsste ich, Abhängig von der Abfrage (speziell der Where-Klausel) jedes Feld der Datenbank indizieren)... es werden mehrere Abfragen dieser Art getätigt nur mit anderen Feldern der Tabelle
                  <br><br>
                  die Tabellen-Größe sind mehrere 10-Tausend Datensätze.. die für den Sum-Ergebnis-Ausdruck verwendeten Datensätze sind um die 10

                  Comment

                  Working...
                  X