Index ( unique, non-unique, bitmap)?

Hallo Leute

Kann mir bitte jemand den unterschied erklären??

Uniqe und non-unique ist klar, aber was kann man mit einem bitmap machen.

Vielen Dank
Christian

Uniqe

Index mit Einmaligen Schlüßeln

non-unique

Index mit Schlüßeln, die mehrfach vorkommen können.

bitmap machen.

Feld von bit’s :smile:
z.B. Um Dateien wie Bilder oder Musik zu speichern.

Chris


www.schlechte-doku-hasser.de

Mahlzeit,

ein Bitmap Index ist für Werte, die nicht unique oder annähernd unique sind, besser geeignet als der sonst übliche B-Tree-Index. Er speichert die auftretenden Werte in einer Bitmap, wie z.B. anhand einer Bücherdatenbank sichtbar:

ISBN GEBUNDEN LIEFERBAR\_IN\_TAGEN
12345 J 1
0815 N 2
4711 N 10
...

Für eine effiziente Indizierung reicht es, die ID und die Wertekombinationen in einer Bitmap zu speichern. Dazu kann der Wert"J’ in eine 1, der Wert ‚N‘ in eine 0 übersetzt werden, numerische Werte binär räpresentiert werden:

12345 0 0001
0815 1 0010
...
4711 0 1010

Der Vorteil liegt auf der Hand: es ist durch für den Computer simple hardwareimplementierte Vergleiche sehr schnell herauszufinden, welche Datensätze das Bit für „Gebunden“ gesetzt haben, usw. usf.

Das gilt wie gesagt nur für Werte, die aus einem begrenzten Wertebereich relativ oft im Datenbesatand vorkommen.

Gruß

Sancho

Hallo Christian und Chris!

Uniqe

Index mit Einmaligen Schlüßeln

Stimmt… (Beispiel: Primary Key)

non-unique

Index mit Schlüßeln, die mehrfach vorkommen können.

Stimmt auch… (Beispiel: häufig bei Foreign Keys)

bitmap machen.

Feld von bit’s :smile:
z.B. Um Dateien wie Bilder oder Musik zu speichern.

Stimmt nicht.
Bitmap Indices unterscheiden sich von „normalen“ Indices hauptsächlich in der internen Darstellung: Während ein „normaler“ (also ein B-Tree Index) für jeden Wert eine Liste von Rows mit dem betreffenden Schlüssel (Schnelldenker merken: bei unique Indices ist das immer nur ein Eintrag pro Liste) speichert, werden bei einem Bitmap Index Bitmaps (Überraschung!) für die Referenzeirung der Daten verwendet. Dabei wird für jeden Schlüsselwert eine Folge von Bits gespeichert, wobei jedes Bit einer Row in der Tabelle entspricht, 0 steht dann für „Row enthält diesen Schlüssel nicht“ und 1 für „Row enthält diesen Schlüssel“.
Anders formuliert: B-Tree Indices speichern für jeden Schlüssel alle Rows, die diesen auch enthalten, Bitmap Indices speichern für jeden Schlüssel alle Rows mit Kennzeichen, ob der Schlüssel enthalten ist oder nicht.
Bitmap Indices sind vor allem für Spalten mit wenigen unterschiedlichen Werten geeignet, da speziell dann noch bei der Kombination von mehreren Kriterien, da ein AND bzw. ein OR binär ja recht einfach zu realisieren sind.

Liebe Grüße
Martin

Chris


www.schlechte-doku-hasser.de

Hi Sancho!

Dein Beispiel ist leider nicht ganz korrekt.

ISBN GEBUNDEN LIEFERBAR\_IN\_TAGEN
12345 J 1
0815 N 2
4711 N 10
...

Ein Bitmap Index für die Spalte gebunden würde vereinfacht so aussehen:

'J' 100
'N' 011

Und für lieferbar_in_tagen so:

'1': 100
'2': 010
'10': 001

Das gilt wie gesagt nur für Werte, die aus einem begrenzten
Wertebereich relativ oft im Datenbesatand vorkommen.

Oracle empfiehlt die Anwendung eines Bitmap Index zu überdenken, wenn die Anzahl der Werte 1 % oder weniger der Anzahl der Rows in der betreffenden Tabelle ist. Klassiker sind wie auch im Beispiel ‚j/n‘ Kennzeichen oder Ländercodes bei Adressen.

Liebe Grüße
Martin

Mahlzeit,

wie die interne Darstellung eines Wertebereichs in der Bitmap ist, ist relativ irrelevant, mir kam es aufs Prinzip an.

Oracle empfiehlt die Anwendung eines Bitmap Index zu
überdenken, wenn die Anzahl der Werte 1 % oder weniger der
Anzahl der Rows in der betreffenden Tabelle ist. Klassiker
sind wie auch im Beispiel ‚j/n‘ Kennzeichen oder Ländercodes
bei Adressen.

Ja, stimmt. Ich ging bei der Lieferbarkeit von genau so einer Verteilung aus (die Bücher sind entweder auf Lager oder beim Großhändler oder beim Verlag zu bestellen).

Gruß

Sancho

Moin Martin

bitmap machen.

Feld von bit’s :smile:
z.B. Um Dateien wie Bilder oder Musik zu speichern.

Stimmt nicht.
[schnip]

Stimmt sehr wohl. Die Frage war: Was kann man mit einem Bitmap in einer DB machen. Oder? Jedenfalls war die Frage so formuliert.
Das es gewichtete und ungewichtete B Bäume gibt (und noch viele andere Strukturen …) ist mir bekannt

Aber vielleicht hast DU ja Lust auf SDH mitzuwirken?

Chris


www.schlechte-doku-hasser.de / www.software-developers-home.de

Mahlzeit,

Stimmt sehr wohl.

Nö.

Die Frage war: Was kann man mit einem Bitmap
in einer DB machen. Oder? Jedenfalls war die Frage so
formuliert.

Oder. Lies mal den Artikeltitel (ich habe ihn hier oben stehen lassen).

Das es gewichtete und ungewichtete B Bäume gibt (und noch
viele andere Strukturen …) ist mir bekannt

Ich bin irritiert. Wenn dir das alles bekannt ist, und jemand stellt Grundsatzfragen, wäre es nicht angebracht, etwas präzisere Antworten zu geben?

Aber vielleicht hast DU ja Lust auf SDH mitzuwirken?

Ich frage mich, wie gu deine Doku ist, wenn ich mir obiges anscheue :smile:

Gruß

Sancho

Hallo Leute

Kann mir bitte jemand den unterschied erklären??

Uniqe und non-unique ist klar, aber was kann man mit einem
bitmap machen.

Der Bitmap-Index ist für Spalten gedacht, die nur wenige Werte annehmen können. Ein Feld mit einen AutoWert hat viele unterschiedliche Werte und ist demnach nicht für einen Bitmap-Index geeignet. Ein bool-Feld oder ein Status-Feld, welches nur einige unterschiedliche Werte annehmen kann, ist ideal geeignet. Der Bitmap Index ist also dann gut, wenn der Wertebereich nur gering streut.

Erklärung: ein normaler Index ist als Baum organisiert, viele gleiche Werte machen diesen Baum unausgewogen und ineffektiv. Idealerweise sollte man einen Index daher eindeutig (unique) machen. Ist ein Spalte nicht eindeutig, verwendet manhäufig einen AutoWert. Bei großen Datenmengen ist unique Index von Vorteil.

Gruß Markus

Hallo Leute,

vielen Dank für eure Erklärungen.
Jetzt ist alles KLAR!

Christian