Beeinflussung des Optimizers
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 14 Jahre, 3 Monaten von
Anonym.
-
AuthorPosts
-
24. Juni 2009 um 10:53 Uhr #4041
AnonymInaktivHallo Leutle …
wir haben ab und an mal in Queries (Joins) die WHERE-Bedingung mit feld1 * 1 "manipuliert" und damit einen Index mies gemacht. Dadurch hat sich die Zugriffsreihenfolge auf die beteiligten Tabellen geändert und die Abarbeitung wurde tw. drastisch besser.
Nun habe ich in Erinnerung, dass der Optimizer mit V8 erstens besser und zweitens "immun" für solche Tricks geworden ist. Jetzt habe ich aber einen Befehl gefunden, der das "*1* noch hat und dadurch drastisch langsamer ist.
Frage an Euch … bilde ich mir das mit dem "immun" nur ein? Angeblich sind doch auch Funktionen indexable. Hat jemand eine Quelle für mich?
Thx
Alexander
24. Juni 2009 um 13:23 Uhr #4207
AnonymInaktivBesser ja – immun nein.
Arithmetische Operationen waren früher Stage-2 und sind jetzt Stage-1 und indexable.
Ausnahme:
Die Multiplikation mit 1, das Addieren von 0 und das Verketten eines leeren Strings ist jetzt stage-1 aber non-indexable. ( Eben weil derartige Operationen zur Optimierung des Zugriffspfades verwendet wurden, wurde das Attribut "nicht indexfähig" beibehalten, aber die Abarbeitung auf stage-1 ermöglicht ).IBM empfiehlt auch in V8 noch diese Technik zur Manipulation des Zugriffspfades:
http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dsnapj15/6.3.8.7
Zitat:
The recommended way is to add 0 to a predicate that evaluates to a numeric value or to concatenate an empty string to a predicate that evaluates to a character value.
24. Juni 2009 um 13:35 Uhr #4333
AnonymInaktivDanke Ulrich!
Jetzt muss ich nur noch rausfinden, wer den ‚*1‘ empfohlen hat. Es ist leider ein Dynamiker, so dass ich keinen Vergleich zu einem V7-Explain ziehen kann.
-
AuthorPosts
You must be logged in to reply to this topic.