phpbar.de logo

Mailinglisten-Archive

Problem mit Index where und order by

Problem mit Index where und order by

Stephan Bulheller mysql-de_(at)_lists.bttr.org
Mon, 25 Mar 2002 10:33:03 +0100


Hallo,

Michael Bonfert schrieb:
> 
> > Vielleicht hilft:
> > http://www.mysql.com/doc/M/y/MySQL_indexes.html
> > Hier steht ganz unten, dass falls ueber 30% der Tabelle getroffen
> > wuerden, MYSQL nicht den Index benutzt, weil es dann schneller geht.
> > Trifft das bei Dir zu???
> 
> Leider nicht. Auch wenn ich den SQL Befehl mit einer  Limit-Anweisung
> versehe wird kein Index verwendet.
> Wenn ich den SQL Befehl so formuliere, daß ich alle Boards <>'board1'
> herausfiltere wir der entsprechende Index verwendet. Bsp. "SELECT * FROM
> Posts WHERE Board<>'board2' AND Board<>'board3' Board<>'board4'ORDER BY
> Number DESC"
> Wenn es in Spalte 'Board' nur Einträge board1..board4 existieren liefert
> mir dieser Befehl ja die gleiche Ergebnismenge und dies mit Index.

Aber das weiss der SQL-Optimizer ja nicht. Der sieht nur, dass der Index
fuer Board1 ueber 30% ausmacht und geht dann ueber alle Datensaetze weil
er so schneller ist.

Anders geht er ueber den Index, weil pro Board wahrscheinlich weniger
als 30% getroffen werden. Und die Ergebnismenge kennt er vorher nicht.

Der Limit Befehl aendert nichts, da er ja ueber mehr als 30% sortiert
und dann erst den Limit macht.

Ohne Sortierung koennte das Limit eventuell den Index nutzen.

--
Stephan

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive