Dienstag, Juni 17, 2014

NULL-Werte in Indizes

Jonathan Lewis hat in seinem Blog zuletzt zwei Artikel veröffentlicht, die sich mit der Speicherung von NULL-Werten in Indizes beschäftigen:
  • Bitmap Nulls: liefert ein kompaktes Beispiel für die Möglichkeit der Verwendung von Bitmap-Indizes bei der Einschränkung über ein IS NULL Prädikat: bekanntlich enthält ein B*Tree-Index keine Einträge für Datensätze, bei denen alle indizierten Spalten einen NULL-Wert enthalten - während im Bitmap Index ausnahmslos jeder Datensatz indiziert wird. Somit kann eine Bedingung column IS NULL im Ausführungsplan als access predicate für einen Bitmap-Index-Zugriff erscheinen. Das ist jetzt in keiner Weise neu, aber der Herr Lewis versteht seinen Artikel als Referenz - und in dieser Funktion würde ich gelegentlich auch darauf verweisen.
  • Cluster Nulls: erläutert, dass auch Cluster Indizes Einträge speichern, bei denen alle indizierten Attribute NULL enthalten - obwohl ein Cluster Index ein B*Tree-Index ist. Als Beleg wird ein Dump des Index-Blocks vorgelegt, der die NULL-Werte enthält: allerdings verwendet der Optimizer einen solchen Index nicht für den Zugriff auf reine NULL-Einträge in User-Queries (auch nicht, wenn man ihn durch Hints dazu zwingen will; nur für interne Operationen wird er herangezogen). Als möglichen Workaround schlägt der Autor einen ergänzenden FBI vor, der die NULL-Werte auf einen Wert mapped, der in den Daten nicht vorkommen kann - was allerdings eine Änderung der Queries erforderlich macht.

Keine Kommentare:

Kommentar veröffentlichen