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
Wed, 20 Mar 2002 18:11:18 +0100


Hallo,

Michael Bonfert schrieb:
> 
> Hallo,
> 
> ich habe folgende Tabelle:
> 
> CREATE TABLE Posts (
>    Board varchar(100) NOT NULL,
>    Number int(11) unsigned NOT NULL auto_increment,
>    Posted int(11) unsigned DEFAULT '0' NOT NULL,
>    Subject text,
>    Body text,
> 
>    PRIMARY KEY (Number),
>    KEY index1 (Number, Board),
>    KEY index2 (Board),
>    KEY index3 (Posted, Board),
>    KEY index4 (Board, Number)
> );
> 
> und folgenden SQL Befehl:
> SELECT * FROM  Posts WHERE Board  = 'board1'  ORDER BY Board DESC, Number
> DESC
> 
> laut Dokumentation
> http://www.mysql.com/doc/O/R/ORDER_BY_optimisation.html
> => SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC,key_part2
> DESC
> 
> sollte der Command wohl index4 verwenden. Stattdessen wird index2
> verwendet.
> 
> Bei
> SELECT * FROM  Posts WHERE Board  <> 'board1'  ORDER BY Board DESC, Number
> DESC
> wird index4 verwendet.
> 
> Warum wird bei 1. SQL Befehl nicht index4 verwendet.
> Wie kann ich den SQL Befehl formulieren, damit index4 angewendet wird.

Normalerweise kannst Du den Index 2 loeschen, da er auch den ersten Teil
des 4. Index alleine nehmen kann. Ansonsten schaut der Optimizer,
welcher Index fuer ihn huenstiger ist und verwendet den.

Kann sein, dass nach dem Loeschen des Index2 der Index4  verwendet wird.

--
Stephan

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



php::bar PHP Wiki   -   Listenarchive