Announcement

Collapse
No announcement yet.

SQL / Join / Sub Select / performance

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

  • SQL / Join / Sub Select / performance

    Hallo,
    <br>
    <br>angenommen man hat eine Tabelle Rechnungen (Kopfdaten) und RechnungsPositionen (Daten der einzelnen positionen) und nun sollen alle Rechnungen und deren Rechnungsbetrag ausgegeben werden. Welches SQL Statement wäre schneller, schöner, besser ...:
    <br>
    <br>Select Rechnungen.ID, Sum(RechnungsPositionen.Preis) as RechnungsSumme <br>From Rechnungen Join RechnungsPositionen On Rechnungen.ID = RechnungsPositionen.RechID
    <br>Group By
    <br>Rechnungen.ID
    <br>
    <br>Oder:
    <br>
    <br>Select Rechnungen.ID, (Select Sum(x.Preis) From RechnungsPositionen x where x.RechID = Rechnungen.ID) as RechnungsSumme From Rechnungen
    <br>
    <br>Meiner Meinung nach ist das SubSelect langsamer, aber dafür ist man nicht so eingeschränkt wie bei einem Group By.
    <br>
    <br>Was meinen Andere dazu?
    <br>
    <br>Gibt es Bücher oder Links, die sich überwiegend mit dem Thema SQL und Performance befassen?
    <br>
    <br>Danke!
    <br>
    <br>mfg
    <br>PS

  • #2
    Hallo,

    man kann derartige Fragen auf zweierlei Art und Weise beantworten. Zum einen durch die Theorie (Sub-Query sollte generell langsamer sein) oder durch die Praxis. Im Fall des InterBase stellt die IBConsole zum einen den QUERY PLAN und zum anderen zusätzliche Statistik-Informationen bereit, die Auskunft über den Aufwand bei der Zusammenstellung der Daten geben (I/O-Zugriffe, Speicherbedarf etc.). Wenn die beteiligten Tabellen mit realistischen Daten gefüllt sind (auch was die Anzahl der Datensätze angeht), würde ich immer den Praxistest das letzte Wort geben, und die verschiedenen Alternativen über einen eigenen Test miteinander vergleichen.
    &#10

    Comment


    • #3
      Danke!
      <br>
      <br>Gibt es denn ein Buch das zeigt wei man performante SQL Statements schreibt?
      <br>
      <br>mfg
      <br>p

      Comment


      • #4
        so ein buch kann on Detaiöl es nicht geben, da das bei jeder DB anders ist.

        Beispielsweise wertet InterBase where Statements von links nach rechts und Oracle andersrum aus. Auf unsere WebSeite ist unter Doku ein kleiner Artikel dazu.

        Am besten in WISQL oder Console Statistics aktivieren und ein wenig experemtieren und wirklich nur an den Stellen optimieren w es kritisc ist, sonst sucht an Tage und spart 3 Nanosekunden

        Comment


        • #5
          Danke!
          <br>
          <br>mfg
          <br>P

          Comment


          • #6
            p.s.

            Nested SQL ist bei InterBase immer langsamm. Ggf. Stored Procedures einsetzen, da kann man es besser steuern

            Comment


            • #7
              Danke!

              mfg
              <br>P

              Comment

              Working...
              X