Index wird "nicht" verwendet

Index wird "nicht" verwendet

am 23.03.2006 12:44:08 von Martin Steiger

Ich habe eine Tabelle, in der ein Feld (anrede, varchar(4)) mit Inhalten
"Herr" oder "Frau" gefüllt ist, Anzahl der Datensätze ist 100'000. Es ist
ein Index auf das Feld gelegt.

Wenn ich jetzt einen Explain auf die Query "SELECT member_id FROM members AS
m WHERE m.Anrede = 'Frau' ORDER BY member_id" mache, wird mir bei Rows
100'000 ausgegeben, obwohl der Index bei Possible_Keys und Keys angegeben
ist.

Müsste hier bei rows jetzt eigentlich nicht die tatsächliche Anzahl
Datensätze stehen, die gefunden wurden? Oder ist mein Index irgendwie
falsch?

Danke im Voraus für die Hilfe beim "Lösen meines Knopfs"...

Martin

Re: Index wird "nicht" verwendet

am 23.03.2006 12:55:32 von Christian Kirsch

Martin schrieb:
> Ich habe eine Tabelle, in der ein Feld (anrede, varchar(4)) mit Inhalten
> "Herr" oder "Frau" gefüllt ist, Anzahl der Datensätze ist 100'000. Es ist
> ein Index auf das Feld gelegt.
>
> Wenn ich jetzt einen Explain auf die Query "SELECT member_id FROM members AS
> m WHERE m.Anrede = 'Frau' ORDER BY member_id" mache, wird mir bei Rows
> 100'000 ausgegeben, obwohl der Index bei Possible_Keys und Keys angegeben
> ist.
>
> Müsste hier bei rows jetzt eigentlich nicht die tatsächliche Anzahl
> Datensätze stehen, die gefunden wurden? Oder ist mein Index irgendwie
> falsch?
>

Lies bitte den Abschnitt zur Verwendung von Indizes im MySQL-Handbuch
durch. Dort findest Du genaue Erläuterungen zu dem Thema. Das Handbuch
liegt unter dev.mysql.com/doc

Re: Index wird "nicht" verwendet

am 23.03.2006 13:18:33 von Sven Paulus

Martin wrote:
> Müsste hier bei rows jetzt eigentlich nicht die tatsächliche Anzahl=20
> Datensätze stehen, die gefunden wurden? Oder ist mein Index irgendwie=20
> falsch?

Siehe:
http://dev.mysql.com/doc/refman/4.1/en/where-optimizations.h tml

"Each table index is queried, and the best index is used unless the
optimizer believes that it is more efficient to use a table scan. At
one time, a scan was used based on whether the best index spanned
more than 30% of the table, but a fixed percentage no longer
determines the choice between using an index or a scan. The
optimizer now is more complex and bases its estimate on additional
factors such as table size, number of rows, and I/O block size."

Bei Deinem Indexfeld, welches nur 2 Werte annehmen kann und evtl.
sogar eine 50/50-Verteilung hat, wird wohl genau dieser Fall
eintreten.

Re: Index wird "nicht" verwendet

am 23.03.2006 13:56:23 von Martin Steiger

> "Sven Paulus" schrieb:
> Bei Deinem Indexfeld, welches nur 2 Werte annehmen kann und evtl.
> sogar eine 50/50-Verteilung hat, wird wohl genau dieser Fall
> eintreten.

Danke! Die Seite habe ich mir vorher durchgelesen, aber den Abschnitt
scheine ich überlesen oder nicht verstanden zu haben...

Martin