Lineare Anfrageoptimierung
Datenbankanfragen haben das Potenzial, sehr ineffizient und langsam zu sein. Die Datenbank selbst optimiert zwar zu einem gewissen Grad, aber es macht definitiv Sinn, seine Queries auch von Hand auf Performance zu optimieren. Hierbei wird versucht, die Zahl der zu berechnenden Zwischenergebnise möglichst gering zu haltenn.
LAO in vier Schritten
- Teile die Selektionsbedingungen so auf, dass sich jede bedingung auf genau eine Tabelle bezieht
- Führe alle Selektionen, die sich nur auf eine Tabelle beziehen direkt auf dieser aus
- Ersetze Kombinationen aus Selektion und kartesischem Produkt durch einen Join
- Bestimme die Ausführungsreihenfolge aller Joins, die zu den kleinsten Zwischenergebnissen führt
Regeln
- Vereinigung, Schnitt, kartesisches Produkt und Join sind kommutativ and assoziativ
- Wenn die Selektionsbedingung eine Konjunktion ist, können Selektionen aufgesplittet und ihre Reihenfolge vertauscht werden
- Die Reihenfolge von Projektion und Selektion ist vertauschbar, wenn die Projektion alle für die Selektion benötigten Attribute liefert
Außerdem
- Projektion möglichst früh durchführen
- Reihenfolge innerhalb eines Joins spielt eine Rolle
- gemeinsame Teilanfragen wiederverwenden
No Comments