Joe Sack liefert im SQLPerformance.com-Blog eine Liste mit zehn Gründen für suboptimale Ausführungspläne im SQL Server, die letztlich - wie bei Oracle - vor allem mit falschen cardinalities zusammenhängen. Die Liste enthält:
- fehlende oder veraltete Statistiken
- nicht repräsentative Samples bei der Statistikerfassung (data skew)
- Korrelation von Spaltenwerten: dagegen helfen im SQL Server multi-column stats (im Fall von Oracle: extended stats)
- intra-table column comparisions, die man durch vorberechnete Spalten ersetzen kann/sollte
- Verwendung von table variables (deren cardinality immer 1 ist - klingt problematisch, aber um das genauer einordnen zu können, müsste ich eine klarere Vorstellung von der Rolle von table variables haben)
- Funktionen (multi-statement table-valued and scalar)
- Datentypen (also vor allem implizite Typ-Konvertierungen)
- komplexe Prädikate
- komplexe Queries
- verteilte Queries (mit remote-Zugriff)
Ich will die Unterschiede nicht marginalisieren, aber grundsätzlich sähe eine entsprechende Aufstellung für Oracle durchaus ähnlich aus.
Keine Kommentare:
Kommentar veröffentlichen