Donnerstag, Juli 12, 2012

PK Validierung

Jonathan Lewis hat in seinem Blog gerade einen äußerst interessanten Artikel über den - ineffizienten - SQL-Code geschrieben, den Oracle bei der Validierung eines PKs auf der Basis eines als non unique definierten Index verwendet: die Operation führt mehrere INDEX FAST FULL SCANs im Rahmen von HASH JOINs aus - obwohl eigentlich damit zu rechnen wäre, dass die Menge der Duplikate eher klein sein sollte, was einen NESTED LOOPS-Zugriff geeigneter machen sollte (wobei die äußere Schleife über einen INDEX FULL SCAN nach Duplikaten - also wiederholten Index-Werten - suchen könnte, und dazu keine Sortierung benötigte, sondern ein SORT GROUP BY NOSORT verwenden könnte). Nach der Analyse des Problems sucht der Herr Lewis dann nach einer Lösung und will eine Baseline einsetzen, um den geeigneten Plan festzulegen - aber das Problem erweist sich als sehr sperrig und widersetzt sich allen Bemühungen (bis hin zum Einsatz von DBMS_ADVANCED_REWRITE). Eine Lösung findet er letztlich nicht, präsentiert aber einen spannenden Fall.

Keine Kommentare:

Kommentar veröffentlichen