Freitag, September 09, 2011

Descending Indexes

Die nächste Quizfrage des Herrn Foote, diesmal zum Thema Descending Indexes. Ohne die Details hier alle noch mal nacherzählen zu wollen, ein paar wichtige Punkte:
  • ein DESC-Index ist vom Typ her FUNCTION-BASED NORMAL
  • beim Überlauf von Index-Blocks erfolgt ein 50/50 Spilt, was den Index weniger kompakt macht als einen ASC-Index, beim dem die Block-Splits 90/10 erfolgen (also eigentlich eher 99/1)
  • der RBO ignoriert neumodischen Kram wie FBIs
  • für einen Index mit nur einer Spalte ist die Definition als descending völlig witzlos, da sie Overhead hervorruft und Oracle einer entsprechenden ascending index ebenfalls zur Vermeidung der Sortierung heranziehen kann. Nur mehrspaltige compound Indizes sind potentiell mit desc (möglicherweise gemischt mit asc) sinnvoll definiert.
Nachtrag 14.09.2011: in den Kommentaren zum Artikel haben sich auch noch die Herren Geist und Lewis zu Wort gemeldet und noch ein paar erinneringswürdige Fakten beigesteuert:
  • descending indexes werden nicht für dynamic sampling in Betracht gezogen: "The reason for not using dynamic sampling on the descending index is also interesting: The dynamic sampling code uses the original predicates (between 42 and 84) and not the actual ones that are then applied to the descending index (the SYS_OP… stuff), so it obviously doesn’t consider the index as candidate for sampling." Randolf Geist
  • descending indexes sind pro row ein byte größer als entsprechend acs indexes: "the descending column is a one’s-bit complement of the original value, stored in ascending order, with a 0xff appended. This means the index will be one byte larger for each row for each descending column – and that’s a pretty good reason for not making every column in an index descending. (Plus there are cases – possibly fixed in 11.2 – where descending indexes won’t be used for plans which would be considered for ascending indexes.)" Jonathan Lewis
  • ein dritter Kommentar zeigt, dass ein ALTER TABLE SHRINK SPACE für Tabellen mit einem DESC Index nicht funktioniert (und einen "ORA-10631: SHRINK clause should not be specified for this object" liefert)

    Keine Kommentare:

    Kommentar veröffentlichen