Hallo,
Wie werden denn Referenzen aus Indexseiten gesucht?
Es war bisher nur von _einer_ Tabelle die Rede. Oder welche "Referenzen" meinst Du?
Woher weiß denn die Find-Funktion des Index, ob der Index balanciert ist, oder auf fast allen Seiten nur 1en hat?
Was ist die Find-Funktion eines Index? Warum ist balanciert und "auf fast allen Seiten nur 1en haben" für Dich offensichtlich ein Gegensatz? Was hat es überhaupt miteinander zu tun?
Und hinter welcher 1 sich dann die anderen passenden Wete verstecken, woher weiß sie das?
Den genauen Ablauf des Index-optimierten Ausführes von WHERE, ORDER BY, SUM() usw. kann ich nicht beschreiben. Ich weiß aber, das Indexe diese Vorgänge optimieren. Hier http://www.linux-magazin.de/Artikel/ausgabe/2001/11/oracle/oracle.html z.B. beschrieben unter der Überschrift "Mit Zeigefinger...". Und ch weiß, dass auch MySQL B*-Tree-Indexe benutzt.
In etwa arbeitet ein Spalten-Index so:
In einem separaten File werden Verweise auf alle Datensätz einer Tabelle nach der indizierten Spalte vorsortiert gespeichert. Wird diese Spalte, z.B. in WHERE, angefordert, dann wird nicht die gesamte Tabelle nach dem geforderten Wert durchsucht und die gefundenen Datensätze gesammelt, die über die gesamte Tabelle versteut liegen können, sondern in der vorsortierten Index-Tabelle wird der erste übereinstimmende Datensatz gesucht, was wegen der Sortierung schon schneller geht. Die weiteren übereinstimmenden Datensätze müssen nun, wegen der Sortierung, unmittelbar folgen.
Natürlich lohnt es sich nicht, Spalten zu idexieren, die ausschließlich _einen_ Wert enthalten können. Aber sonst dürften Indexe _immer_ etwas bringen. Stell Dir eine Tabelle mit 100.000 Datensätzen vor, deren Typ-Spalte 70.000 Mal 1 und 30.000 Mal 2 enthält. Du bist wirklich der Meinung, dass ein Index auf Typ, welcher dafür sorgt, dass erst die 70.000 und dann die 30.000 Datensätze vorsortiert werden, keinen Vorteil gegenüber einem full-table-scan in der unsortierten Tabelle bringt?
viele Grüße
Axel