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
- 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?
- 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
- 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?
The Projection Operator
- yeahhh todo asdlasldlasdladslasld