Was macht denn so ein B-Tree Index mit meiner Tabelle dass der
Bitmap Index dann streikt ?
Da wäre vielleicht mal ein komplettes Create-script
(jedenfalls das für die Tabelle und die zugehörigen Indizes)
interessant…
Streiten sich da vielleicht zwei Indizes um die gleiche Spalte
oder Spaltenliste? 
OK, hier das CREATE TABLE Skript:
CREATE TABLE Umfrage
(nr INT NOT NULL,
geschlecht CHAR(1) NOT NULL,
familienstand CHAR(15) NULL,
beruf CHAR(20) NULL,
geburtsjahr INT NOT NULL,
automarke CHAR(15) NOT NULL,
getraenk CHAR(15) NOT NULL,
waschmittel CHAR(25) NOT NULL,
urlaubsziel CHAR(25) NOT NULL,
wohnort CHAR(20) NOT NULL);
Anschliessend hab ich die Tabelle mit folgender Prozedur gefuettert:
CREATE OR REPLACE PROCEDURE einfuegen_umfrage(anzahl INT) IS
nr INTEGER := 0;
geschlecht CHAR(1) := ‚w‘;
familienstand CHAR(15) := null;
beruf CHAR(20) := null;
geburtsjahr INTEGER := 1930;
automarke CHAR(15) := ‚auto1‘;
getraenk CHAR(15) := ‚getraenk1‘;
waschmittel CHAR(25) := ‚waschmittel1‘;
urlaubsziel CHAR(25) := ‚urlaubsziel1‘;
wohnort CHAR(20) := ‚wohnort1‘;
BEGIN
LOOP
– Nummern von 1 bis 1.000.000
nr := nr + 1;
– Selektivitaet 2: maennlich, weiblich
IF MOD(nr, 2) = 0
THEN geschlecht := ‚w‘;
ELSE
geschlecht := ‚m‘;
END IF;
– Selektivitaet 5: ledig, verheiratet, geschieden, verwitwet, null
IF MOD(nr, 5) = 0
THEN familienstand := ‚ledig‘;
ELSIF MOD(nr, 5) = 1
THEN familienstand := ‚verheiratet‘;
ELSIF MOD(nr, 5) = 2
THEN familienstand := ‚geschieden‘;
ELSIF MOD(nr, 5) = 3
THEN familienstand := ‚verwitwet‘;
ELSE
familienstand := null;
END IF;
– Selektivitaet 20: beruf1 … beruf20
beruf := ‚beruf‘ || (MOD(nr, 20) + 1);
– Selektivitaet 50: 1930 … 1980
geburtsjahr := 1930 + MOD(nr, 50);
– Selektivitaet 300: automarke1 … automarke300
automarke := ‚automarke‘ || (MOD(nr, 300) + 1);
– Selektivitaet 1.000: getraenk1 … getraenk1000
getraenk := ‚getraenk‘ || (MOD(nr, 1000) + 1);
– Selektivitaet 5.000: waschmittel1 … waschmittel5000
waschmittel := ‚waschmittel‘ || (MOD(nr, 5000) + 1);
– Selektivitaet 20.000: urlaubsziel1 … urlaubsziel20000
urlaubsziel := ‚urlaubsziel‘ || (MOD(nr, 20000) + 1);
– Selektivitaet 50.000: wohnort1 … wohnort50000
wohnort := ‚wohnort‘ || (MOD(nr, 50000) + 1);
EXIT WHEN nr > anzahl;
INSERT INTO umfrage
VALUES (nr, geschlecht, familienstand, beruf, geburtsjahr,
automarke, getraenk, waschmittel, urlaubsziel, wohnort);
END LOOP;
END einfuegen_umfrage;
/
Dann hab ich zuerst einen normalen Index auf jede einzelne Spalte erstellt und meine SELECT Anweisungen ausgefuehrt. Anschliessend hab ich die Indizes mit DROP INDEX wieder geloescht und wollte dann die Bitmap Indizes erstellen. Und an der Stelle spuckt er dann die Fehlermeldung aus.
Hilft dir das weiter oder soll ich die CREATE INDEX Anweisung auch noch posten ? Interessiert mich brennend warum das nicht funktioniert !!!
Um den Fehler zu umgehen, hab ich jetzt einfach 3 identische Tabellen (mit unterschiedlichen Namen) angelegt so dass ich die Indizes nicht immer loeschen muss. Nur bin ich mir noch nicht ganz so sicher, ob ich damit nicht die Ergebnisse der Zeitmessung der SELECT-Anweisungen zerstoere weil’s halt nicht mehr ein und diesselbe Tabelle ist.
Gruss Claudia