Pourquoi il n'utilise pas l'index sur cet order by ? [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 01-02-2004 à 22:28:51
sauf erreur l'index sur la clé primaire est physique (les données sont physiquement l'une après l'autre)
Donc pas besoin de faire un index logique (seconde index)
Je ne sais pas si je réponds à ta question mais c'est peut-être une piste
Marsh Posté le 01-02-2004 à 23:25:21
euh non, désolé mais ça a aucun rapport avec mon problème :-/
Enfin pour mon problème, je suis entrain de me demander si c'est pas simplement un bug du EXPLAIN parce que les requetes vont drôlement vite alors je pense qu'elles utilisent quand même l'index
Marsh Posté le 02-02-2004 à 01:34:31
Code :
|
Marsh Posté le 02-02-2004 à 01:35:01
le problème est le même avec cat, un ORDER BY cat n'utilise pas d'index... :-/
Marsh Posté le 02-02-2004 à 01:38:18
Effectivement, il a pas l'air d'utiliser la clé pour le tri
Marsh Posté le 02-02-2004 à 09:26:32
dweis a écrit : euh non, désolé mais ça a aucun rapport avec mon problème :-/ |
Marsh Posté le 02-02-2004 à 09:29:01
gizmo a écrit : |
Non puisque comme je l'ai dit, j'ai le même problème avec ORDER BY cat qui n'est pas la clé primaire
Marsh Posté le 02-02-2004 à 09:30:25
gizmo a écrit : |
Ouais mais bon s'il me tri 700.000 éléments en moins de 0.01s, j'ai quand même des doutes...
Marsh Posté le 02-02-2004 à 12:36:59
Ils sont déjà trié. C'est ce que veut dire Gizmo. Un primary key est un index de type "UNIQUE" et "CLUSTERED".
UNIQUE implique qu'il n'y a pas de doublon (donc PK) et CLUSTERD indique que les champs sont physiquement triés dans le fichier de la base, donc pas besoin de lire l'index pour retrouver les champs dans l'ordre.
Si tu crées un autre index clustered ne faisant pas appel à ID, alors à ce moment tu verras qu'il utilise l'index pour retrouver l'ordre sur l'ID, car il ne seront plus dans l'ordre.
Marsh Posté le 02-02-2004 à 12:45:53
Je suppose que par défaut les indexes sont de type hachage (qui permet de chercher *une* valeur en temps constant), donc sans ordre, il faut forcer ton index à BTREE (arbre binaire) pour qu'il soit utile à tout ce qui est ordre, mais je sais pas comment on fait dans MySQL.
Marsh Posté le 02-02-2004 à 12:50:49
MagicBuzz a écrit : Ils sont déjà trié. C'est ce que veut dire Gizmo. Un primary key est un index de type "UNIQUE" et "CLUSTERED". |
oui mais non puisque le problème est le même pour le champ cat et ce n'est donc pas le champ primary key
Marsh Posté le 01-02-2004 à 22:23:54
J'ai une requete toute conne de type :
Et apparement (d'après l'EXPLAIN), il n'utilise pas l'index (qui existe sur id) pour cette requete.
alors que si je fais un truc du genre
là il l'utilise sans problème.
Je viens de lire http://www.nexen.net/docs/mysql/an [...] sation.php et je ne vois vraiment pas ce qui pourrait empêcher l'utilisation de l'index dans mon cas :-(
J'ai mysql 4.0.16
Message édité par dweis le 01-02-2004 à 22:24:20