yo,
Aber ich stimme Dir noch nicht ganz zu. Da musst Du bitte nochmal etwas Nachhilfe leisten.
es wäre ja auch schlimm, wenn man in allem immer übereinstimmt. es gibt halt einfach zu bestimmten dingen verschiedene ansichten. das könnte man auch einfach so stehen lassen.
Die Art des Index auf ein "normales" Textfeld legt doch i.d.R. der Programmierer beim Design der Tabelle fest, und nicht das DBMS während der Eingabe von Daten.
jein, eher nicht, wobei jeder da seine vorgehensweise hat. das ist ja mal ein nichtssagender satz ;-)
aber wenn ich die ersten drei normaliserungen durchgehe, dann steht da erst einmal nichts von index. so wie in der präsentation hat ein index andere kriterien, nach denen beurteilt wird. viel wichtiger als das design der daten (tabellen) ist der inhalt und vielmehr noch die art, wie ich die daten abfrage, sprich kommt eine spalte in einer where bedingung vor, benutzt sie eine funktion, ist die spalte ein join kriterium, etc. das sind dann eher die dinge, wonach man einen index anlegt. sicherlich spielt das design auch eine grosse rolle, deswegen denormalisiert man eventuell auch wieder. aber ich würde keinen index nur aufgrund des designs setzen.
Wenn sich nun während der Befüllung der Spalte erst herausstellt, dass der üblich Index hier ungeeignet ist, gibt es das DBMS, die das automatisch erkennen und dann automatisch ein Reindex auf den anderen Typ durchführen?
dynamik in datenbanken ist ja nun gerade das kriterium was für eine datenbank spricht. es ist ein ganz normaler vorgang, dass ein design und auch ein index nicht für die ewigkeit geschaffen ist. dbms versuchen das zu "händeln", sprich dafür ist der optimierer zuständig. wie genau das passiert, ist recht kompliziert und funktioniert auch nicht immer. deswegen gibt es unter oracle auch sogenannte hints, die der "intelligenz" des dbms einhalt gebieten, wenn er was tut, was sich nicht als ganz nützlich herausstellt. bei oracle zum beispiel arbeitet der optimierer auf zwei unterschiedliche arten, rule based und cost based. bei der ersten art geht er stur nach ganz bestimmen regeln vor, sprich gibt es da einen index, etc. der cost based ist komplexer und versucht verschiedene wege zu bewerten, wobei er hier auf bestimmte informationen zurückgreift, quasi eine art erfahrungs und bewertungsliste.
Da ein Bitmap-Index bis zu einer bestimmten Anzahl von möglichen Werten ja sehr schlank ist, könnte man ihn ja eine zeitlang einfach parallel mitführen und gelegentlich einen Seektest durchführen. Der Index, der gewinnt, bleibt für die Suche aktiv. Das erspart einem aber trotzdem nicht den Aufwand bei der Pflege. Die Pflege des inaktiven Index könnte man aber auf weniger belastete Zeiten verschieben.
bei einer kardinalität von 70.000/30.000 braucht man keinen test b-tree gegen bitmap, vielleicht nur, um sich den unterscheid einmal vor augen zu führen. der sollte nämlich sehr gross sein. aber liegt die sache nicht so klar auf der hand, kann man sicherlich verschiedene möglichkeiten durchspielen, wobei ein index nicht die einzige möglichkeit ist. und genau das wird auch in der praxis gemacht, "set timing on" und sehen, wielange mit einer bestimmten veränderung bestimmte vorgänge brauchen.
Ilja