Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2655 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Pourquoi il n'utilise pas l'index sur cet order by ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Pourquoi il n'utilise pas l'index sur cet order by ?

n°628056
dweis
Posté le 01-02-2004 à 22:23:54  profilanswer
 

J'ai une requete toute conne de type :

Code :
  1. SELECT * FROM produit ORDER BY id


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

Code :
  1. SELECT * FROM produit WHERE id=5465


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
mood
Publicité
Posté le 01-02-2004 à 22:23:54  profilanswer
 

n°628063
jagstang
Pa Capona ಠ_ಠ
Posté le 01-02-2004 à 22:28:51  profilanswer
 

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

n°628106
dweis
Posté le 01-02-2004 à 23:25:21  profilanswer
 

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

n°628152
mrbebert
Posté le 02-02-2004 à 00:44:23  profilanswer
 

Bizarre :??:  
Tu aurais la structure de la table ? [:figti]

n°628166
dweis
Posté le 02-02-2004 à 01:34:31  profilanswer
 

Code :
  1. CREATE TABLE produit (
  2.   id int(11) NOT NULL default '0',
  3.   nom varchar(250) NOT NULL default '',
  4.   cat int(11) NOT NULL default '0',
  5.   PRIMARY KEY  (id),
  6.   KEY i_cat (cat),
  7.   FULLTEXT KEY i_nom (nom)
  8. ) TYPE=MyISAM;

n°628167
dweis
Posté le 02-02-2004 à 01:35:01  profilanswer
 

le problème est le même avec cat, un ORDER BY cat n'utilise pas d'index... :-/

n°628168
mrbebert
Posté le 02-02-2004 à 01:38:18  profilanswer
 

Effectivement, il a pas l'air d'utiliser la clé pour le tri [:figti]

n°628258
gizmo
Posté le 02-02-2004 à 09:26:32  profilanswer
 

dweis a écrit :

euh non, désolé mais ça a aucun rapport avec mon problème :-/
Bah si, justement, ca a complètement rapport avec ton 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
Ce n'est pas parce que c'est rapide qe ça utilise un index, ça peut même être le contraire.

n°628261
dweis
Posté le 02-02-2004 à 09:29:01  profilanswer
 

gizmo a écrit :


Bah si, justement, ca a complètement rapport avec ton problème  


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

n°628263
dweis
Posté le 02-02-2004 à 09:30:25  profilanswer
 

gizmo a écrit :


Ce n'est pas parce que c'est rapide qe ça utilise un index, ça peut même être le contraire.


 
Ouais mais bon s'il me tri 700.000 éléments en moins de 0.01s, j'ai quand même des doutes...

mood
Publicité
Posté le 02-02-2004 à 09:30:25  profilanswer
 

n°628387
MagicBuzz
Posté le 02-02-2004 à 12:36:59  profilanswer
 

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.

n°628399
nraynaud
lol
Posté le 02-02-2004 à 12:45:53  profilanswer
 

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.


---------------
trainoo.com, c'est fini
n°628406
dweis
Posté le 02-02-2004 à 12:49:18  profilanswer
 

non les index sont bien en btree

n°628408
dweis
Posté le 02-02-2004 à 12:50:49  profilanswer
 

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".
 
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.


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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Pourquoi il n'utilise pas l'index sur cet order by ?

 

Sujets relatifs
[PHP-PostgresSQL] Comment récupérer l'index d'insertion?[MySQL] moyenne pondérée, j'y arrive pas ! (help me please)
[PHP-MySQL] Récupérer la date de dernière modif. de la DB ??MySQL : pb de ram perdue + requetes "sub select"
[MySQL] Aggrégation horaire + Trioù trouver la doc sur odbc pour interroger les bdd mysql en c++ ?
comment lire dans une base de données MySQL en c++ sous windows ?clés étrangères MySQL
configurer MySQL et PHP sur Linux[mysql] Index where & order by
Plus de sujets relatifs à : [MySQL] Pourquoi il n'utilise pas l'index sur cet order by ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR