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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL] : un select where sur un INDEX, et mysql l'utilise pas !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL] : un select where sur un INDEX, et mysql l'utilise pas !!

n°182072
Dost67
Posté le 24-07-2002 à 20:00:06  profilanswer
 

A tt hasard essaie sans les quotes :

Code :
  1. WHERE cat = 10

Mais alors c'est pas sûr du tout que le pb vient de là !

mood
Publicité
Posté le 24-07-2002 à 20:00:06  profilanswer
 

n°182073
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-07-2002 à 20:00:35  profilanswer
 

je sais pas pourquoi il utlise pas ton fucking index mais c'est pas une raison pour balancer des fucking jpeg :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°182074
Dost67
Posté le 24-07-2002 à 20:01:36  profilanswer
 

Mets un ORDER BY ton_id DESC, c'est mieux pour les LIMIT.
 
Est-ce que ça fonctionne sans le LIMIT ?

n°182078
Dost67
Posté le 24-07-2002 à 20:05:09  profilanswer
 

antp a écrit a écrit :

je sais pas pourquoi il utlise pas ton fucking index mais c'est pas une raison pour balancer des fucking jpeg :D



Gueule pas trop ! Pour une fois qu'un pb est exposé clairement... ;)

n°182081
Dost67
Posté le 24-07-2002 à 20:07:41  profilanswer
 

RELAX Sky a écrit a écrit :

le pb c'est que la table contient 1000000 enregistrements, et l'index topic (que j'ai supprimé là) fait enornément ramer la requete, elle met 5 secondes a se faire :(




Koi t'as une table sans PRIMARY KEY ! Normalement avec un PRIMARY KEY sur ton id ça ne doit pas ramer le ORDER BY id DESC !!!

n°182084
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-07-2002 à 20:11:03  profilanswer
 

Dost67 a écrit a écrit :

Gueule pas trop ! Pour une fois qu'un pb est exposé clairement... ;)




 
ouais mais bon le jpeg pour les screenshots ça pue :p


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°182087
Dost67
Posté le 24-07-2002 à 20:13:02  profilanswer
 

Alors là je ne comprends rien : tu parles de 1 000 000 d'enregistrements alors que dans PHPMyAdmin y'a écrit 35 760.
Or 70 000 > 35 760 ... donc faudrait être plus clair parce que je ne comprends pas.
 
Aussi, y'a une histoire de 30% avec les index. Si presques tous les champs cat de la table sont à 10, ça doit être normal que l'index ne soit pas utilisé.

n°182088
antp
Super Administrateur
Champion des excuses bidons
Posté le 24-07-2002 à 20:15:15  profilanswer
 

RELAX Sky a écrit a écrit :

ho recommence pas ou je te TT ! :D
 
bon, update : (antp tagueule  :lol: )
 
http://hfrskylight.free.fr/sql3.jpg
http://hfrskylight.free.fr/sql4.jpg




 
heu c'est qui qui peut TT l'autre ? :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°182090
Dost67
Posté le 24-07-2002 à 20:17:38  profilanswer
 

Fais d'abord :

Code :
  1. EXPLAIN SELECT * FROM forum_topics WHERE cat = 10

Et dis nous si l'index est utilisé.

n°182098
Dost67
Posté le 24-07-2002 à 20:27:03  profilanswer
 

J'ai trouvé ça :

Citation :

If the use of the index would require MySQL to access more than 30% of the rows in the table. (In this case a table scan is probably much faster, as this will require us to do much fewer seeks.) Note that if such a query uses LIMIT to only retrieve part of the rows, MySQL will use an index anyway, as it can much more quickly find the few rows to return in the result.

http://www.mysql.com/doc/M/y/MySQL_indexes.html

mood
Publicité
Posté le 24-07-2002 à 20:27:03  profilanswer
 

n°182349
Poulou
Posté le 25-07-2002 à 09:32:40  profilanswer
 

tu peux tjs utiliser l'option 'USE INDEX cat' pour forcer l'utilisation de ton index.
 

Citation :

table_name [[AS] alias] [USE INDEX (key_list)] [IGNORE INDEX (key_list)]
 
As of MySQL Version 3.23.12, you can give hints about which index MySQL should use when retrieving information from a table. This is useful if EXPLAIN shows that MySQL is using the wrong index. By specifying USE INDEX (key_list), you can tell MySQL to use only one of the specified indexes to find rows in the table. The alternative syntax IGNORE INDEX (key_list) can be used to tell MySQL to not use some particular index. USE/IGNORE KEY are synonyms for USE/IGNORE INDEX.

n°182399
Max Evans
Posté le 25-07-2002 à 10:12:26  profilanswer
 

Poulou a écrit a écrit :

tu peux tjs utiliser l'option 'USE INDEX cat' pour forcer l'utilisation de ton index.
 

Citation :

table_name [[AS] alias] [USE INDEX (key_list)] [IGNORE INDEX (key_list)]
 
As of MySQL Version 3.23.12, you can give hints about which index MySQL should use when retrieving information from a table. This is useful if EXPLAIN shows that MySQL is using the wrong index. By specifying USE INDEX (key_list), you can tell MySQL to use only one of the specified indexes to find rows in the table. The alternative syntax IGNORE INDEX (key_list) can be used to tell MySQL to not use some particular index. USE/IGNORE KEY are synonyms for USE/IGNORE INDEX.






 
Ca se met a la fin de la requete ?
Style : SELECT .... FROM ... WHERE .... ORDER BY ... LIMIT ... USE INDEX cat ?


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°182405
Poulou
Posté le 25-07-2002 à 10:19:09  profilanswer
 

non :

SELECT machin FROM truc USE INDEX (nomindex) WHERE patati...

n°182407
Max Evans
Posté le 25-07-2002 à 10:19:49  profilanswer
 

Ha oki, merchi ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°182423
Poulou
Posté le 25-07-2002 à 10:28:20  profilanswer
 

Enfin si MySQL veut pas utiliser un index qui est créé spécialement pour la requête il faut se poser des questions ou en tout cas faire des benchs sur le select pour voir les différence entre l'index proposé par MySQL et celui qu'on veut forcer

n°182428
Max Evans
Posté le 25-07-2002 à 10:34:23  profilanswer
 

Ca marche bien :)
Par contre, pour une autre requete, qui est une jointure, ca rame autant :(
Fo mettre un USE INDEX pour la deuxieme table aussi ? :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°182434
Poulou
Posté le 25-07-2002 à 10:43:27  profilanswer
 

Tout dépend de ta requête et de ta jointure.
Il faut éventuellement créer un autre index (ton cat ne convint pas forcément) et voir avec un EXPLAIN si MySQL l'utilise. Sinon tu peux encore le forcer.

n°182438
Max Evans
Posté le 25-07-2002 à 10:49:24  profilanswer
 

Oki, je v tester :)
 
Tu peux aller la : http://81.67.52.214/E-Sky/forum1.p [...] orum&cat=1 et me dire si c rapide ?
 
PS : Ds cette section y a 139975 topics, et en tout, y en a 569891 :)
 
Merchi bien ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
n°182447
Limit
Posté le 25-07-2002 à 10:59:29  profilanswer
 

max > si c'est rapide pour toi, c'est rapide pour tout le monde, idem pour la lenteur.

n°182449
Max Evans
Posté le 25-07-2002 à 11:00:16  profilanswer
 

Limit a écrit a écrit :

max > si c'est rapide pour toi, c'est rapide pour tout le monde, idem pour la lenteur.




 
 :jap:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
mood
Publicité
Posté le   profilanswer
 


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

  [MYSQL] : un select where sur un INDEX, et mysql l'utilise pas !!

 

Sujets relatifs
Cherche tut en fr sur les transactions avec MySqlProblème hydraphp et mysql en local (avec easyPHP) (résolu)
[MySQL] Rapidité d'un SELECT ...comment creer une base mysql sur multimania svp
[PHP/MySQL] Retourner les valeurs ajoutées dans une tableMySql -- Un index sur un SET('0','1') est-il utile ?
Le meilleur des composant mysql ?[PHP/MySQL] Supprimer les entrées en double?
Plus de sujets relatifs à : [MYSQL] : un select where sur un INDEX, et mysql l'utilise pas !!


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