Query Optimization and Execution

  • Wir wollen uns jetzt mal anschauen wie wir Queries "vereinfachen" bzw. optimerein können, damit wir dann gut mit denen arbeiten können und die dann idealerweise sehr schnell ausgeführt werden können
  • Wir schauen uns dazu unsere relationelle algebra an
  • Damit können wir ja alles was wir ausführen wollen darstellen

Query processing

Die Queries werden in mehreren schritten evaluiert

  1. Wir scannen, parsen und validieren die queries
    • Wir schauen ob das valides SQL ist
    • Wir überprüfen ob alles was dadrin abgefragt wird auch überhaupt da ist
    • Was bedeutet dat eig?
  2. Wir optimieren die query
    • Wir schauen in welcher reihenfolge die queries optimal ausgeführt werden können
    • Queries werden in "plans" gespeichert, das ist nen baum, der vorgibt wie was wann wo abgefragt werden soll
    • Wenns irgendwie passt, fassen wir bäume zusammen
  3. Query executor
    • führt die query am ende dann auch wirklich aus
    • führt die ganzen internen dinge aus, die passieren müssen damit der kram "wirklich passiert"

Relational Selection Operator

  • Wenn wir eine Relation betrachten, können wir eine selektion wie folgt definieren:
  • Eine condition zur selektion kann auch aus mehreren conditions bestehen
  • Es gibt mehrere unerschiedliche algorithmen, die sich aber meisstens nur in der strategie für das finden con tupeln unterscheiden

Selections

  • Es gibt einige verschiedene Möglichkeiten zu selecten
  • Selection with Scan
    • Wir scannen durch jede page vom speicher und seammeln uns so alles zusammen was wir brauchen
  • Selection with Index
    • Wir gehen mal davon aus, dass es nen index gibt, der vom 1. bis zum n. element konstant bleibt
    • Durch den iterieren wir, anstelle die ganze relation zu durchsuchen
    • Das kann aber relativ teuer werden, naja teuer ist wie immer relativ
    • je nachdem wie viele indizes es gibt, dauerts halt länger, nich?
    • 10

The Projection Operator

  • yeahhh todo asdlasldlasdladslasld