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

: un select where sur un INDEX, et mysql l'utilise pas !! [MYSQL] - SQL/NoSQL - Programmation

Marsh Posté le 24-07-2002 à 20:00:06    

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à !

Reply

Marsh Posté le 24-07-2002 à 20:00:06   

Reply

Marsh Posté le 24-07-2002 à 20:00:35    

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
Reply

Marsh Posté le 24-07-2002 à 20:01:36    

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

Reply

Marsh Posté le 24-07-2002 à 20:05:09    

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... ;)

Reply

Marsh Posté le 24-07-2002 à 20:07:41    

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 !!!

Reply

Marsh Posté le 24-07-2002 à 20:11:03    

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
Reply

Marsh Posté le 24-07-2002 à 20:13:02    

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

Reply

Marsh Posté le 24-07-2002 à 20:15:15    

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
Reply

Marsh Posté le 24-07-2002 à 20:17:38    

Fais d'abord :

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

Et dis nous si l'index est utilisé.

Reply

Marsh Posté le 24-07-2002 à 20:27:03    

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

Reply

Marsh Posté le 24-07-2002 à 20:27:03   

Reply

Marsh Posté le 25-07-2002 à 09:32:40    

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.

Reply

Marsh Posté le 25-07-2002 à 10:12:26    

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
Reply

Marsh Posté le 25-07-2002 à 10:19:09    

non :

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

Reply

Marsh Posté le 25-07-2002 à 10:19:49    

Ha oki, merchi ;)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 25-07-2002 à 10:28:20    

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

Reply

Marsh Posté le 25-07-2002 à 10:34:23    

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
Reply

Marsh Posté le 25-07-2002 à 10:43:27    

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.

Reply

Marsh Posté le 25-07-2002 à 10:49:24    

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
Reply

Marsh Posté le 25-07-2002 à 10:59:29    

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

Reply

Marsh Posté le 25-07-2002 à 11:00:16    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed