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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  optimisation des requetes SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

optimisation des requetes SQL

n°1504507
the_bigboo
Posté le 18-01-2007 à 10:09:35  profilanswer
 

Bonjour a tous :)
 
J'ai une petite question a vous poser, ca peut sembler idiot, mais , quand on créé des index sur une tables, faut-il spécifier quoi que ce soit dans la requete SQL pour que l'index soit utilisé ou bien est-ce fait par défaut dans le mysql_query() ? Car en delphi j'ai bossé avec un serveur oracle et il fallait tout expliciter...
 
Merci de vos réponses :)


Message édité par the_bigboo le 18-01-2007 à 16:37:35
mood
Publicité
Posté le 18-01-2007 à 10:09:35  profilanswer
 

n°1504554
omega2
Posté le 18-01-2007 à 11:31:47  profilanswer
 

Avec mysql, t'as deux solutions, soit tu le laisses utiliser les index qu'il juge utile, soit tu lui indique lesquels utiliser (voir doc pour plus de détail)
En général, il n'y a pas besoin de lui préciser les index à utiliser et en pratique, je n'ai jamais eu besoin de lui forcer la main.

n°1504564
the_bigboo
Posté le 18-01-2007 à 11:50:56  profilanswer
 

ce qui m'intrigue c'est que j'ai une table avec environ 50000 enregistrements, et le champs sur lequel je fais des requetes et le champ cat_id, qui est de type INT... Mais je n'ai vu aucune de différence  avec ou sans index :/

n°1504568
omega2
Posté le 18-01-2007 à 11:57:36  profilanswer
 

Je en sais pas si ca marche en php, mais avec le "mysqlquerybrowser" et autres programmes du genre, on peut obtenir des détails sur l'exécution de la requette en rajoutant le mot clé "explain" dans la requette.
exemple : "explain select * from matable order by id".
 
Si tu ne peux pas faire ça mais que t'as accés aux fichiers de log de mysql, tu peux essayer de voir si ta requette est indiqué comme étant une "requette sans index" (a condition que ces requettes là soit logué)

n°1504580
rufo
Pas me confondre avec Lycos!
Posté le 18-01-2007 à 12:32:39  profilanswer
 

50000 enregistrements, c'est pas très significatif et faut voir la complexité de la requête...

n°1504598
the_bigboo
Posté le 18-01-2007 à 13:46:56  profilanswer
 

c'est un select tout bete, mais en fait ce select comporte un autre champ qui le lie par une clé étrangere a une autre table, et auquel je fais appel pour faire ma jointure, j'ai mit des index sur tous ces champs qui snt de type INT et très souvents appelés dans la clause WHERE de mes requetes, et fait je fais un SELECT A.* FROM .... AS A INNER JOIN ... As B ON (A.sid = B.id ) WHERE B.cat_id="..."

 

et pour afficher 50 enregistrements, ca prends 10/15 secondes ! :ouch:
Je vais finir par croire que ca a été codé avec les pieds :pfff:


Message édité par the_bigboo le 18-01-2007 à 13:47:05
n°1504600
rufo
Pas me confondre avec Lycos!
Posté le 18-01-2007 à 13:51:47  profilanswer
 

bizarre, en effet... Par contre, tu ne devrais pas mettre * dans ton select.

n°1504651
the_bigboo
Posté le 18-01-2007 à 16:01:34  profilanswer
 

Ben si car j'utilise tous les champs !

n°1504654
skeye
Posté le 18-01-2007 à 16:03:35  profilanswer
 

PUTAIN MAIS QU4EST CE QUE CE TOPIC FOUT EN CAT PHP PUTAIN DE BORDEL 0 QUEUE§§§§§§§§§§§[/MECHANT]


---------------
Can't buy what I want because it's free -
n°1504657
Chaos Inte​stinal
Posté le 18-01-2007 à 16:07:30  profilanswer
 

skeye a écrit :

PUTAIN MAIS QU4EST CE QUE CE TOPIC FOUT EN CAT PHP PUTAIN DE BORDEL 0 QUEUE§§§§§§§§§§§[/MECHANT]


 
Il a dit mysql_query() [:cbrs]
(moi aussi j'ai insulté cet égorgeur de chèvres, mais il y avait un piège, j'ai donc effacé mon post)

mood
Publicité
Posté le 18-01-2007 à 16:07:30  profilanswer
 

n°1504658
skeye
Posté le 18-01-2007 à 16:08:22  profilanswer
 

(et depuis quand il faut expliquer à oracle qu'il faut utiliser les indexes?[:mlc] [:mlc] [:mlc])


---------------
Can't buy what I want because it's free -
n°1504660
the_bigboo
Posté le 18-01-2007 à 16:09:37  profilanswer
 

skeye a écrit :

PUTAIN MAIS QU4EST CE QUE CE TOPIC FOUT EN CAT PHP PUTAIN DE BORDEL 0 QUEUE§§§§§§§§§§§[/MECHANT]


Car le principe c'est de savoir si je peux tirer parti des index dans mes mysql_query comme je le fais en delphi avec de l'oracle... Car je constate aucune amélioration avec ou sans index...

n°1504661
the_bigboo
Posté le 18-01-2007 à 16:09:52  profilanswer
 

skeye a écrit :

(et depuis quand il faut expliquer à oracle qu'il faut utiliser les indexes?[:mlc] [:mlc] [:mlc])


En delphi..

n°1504663
skeye
Posté le 18-01-2007 à 16:11:55  profilanswer
 

the_bigboo a écrit :

Car le principe c'est de savoir si je peux tirer parti des index dans mes mysql_query comme je le fais en delphi avec de l'oracle... Car je constate aucune amélioration avec ou sans index...


 


 
En delphi, en C, en php ou ce que tu veux, les indexes c'est du sgbd. Point barre.


---------------
Can't buy what I want because it's free -
n°1504674
the_bigboo
Posté le 18-01-2007 à 16:37:25  profilanswer
 

soit, je déplace... devant une telle preuve de respect :pfff:

n°1504676
Chaos Inte​stinal
Posté le 18-01-2007 à 16:38:18  profilanswer
 

the_bigboo a écrit :

soit, je déplace... devant une telle preuve de respect :pfff:


 
Ouiiiin les méchants, ouiiiiin  [:zytrasnif]

n°1504678
skeye
Posté le 18-01-2007 à 16:40:31  profilanswer
 

Le premier qui manque de respect aux autres c'est celui qui prend pas la peine de poster au bon endroit.[:dawa]
 
Et quelle que soit la méthode utilisée pour exécuter ta requête, si ton sgbd voit des indexes utilisables il les utilise, point barre.


---------------
Can't buy what I want because it's free -
n°1505943
MagicBuzz
Posté le 22-01-2007 à 15:47:23  profilanswer
 

d'un autre côté, c'est Delphi...
 
tu sais, Delphi ça a été développé par des Voodoo canibales. faut pas s'attendre à ce que ça marche normalement :D
 
je pense surtout qu'en Delphi, tout comme en VB ou en C# par exemple, on peut parfaitement exécuter les jointures et les filtres dans le programme et non sur le serveur (c'est gore mais c'est comme ça), ce qui oblige à créer ses propres index dans son programme.
 
m'enfin bref, tout ça pour dire que non, tu mets rien et ça va marcher tout seul. tu ne vois pas de différence parceque : 1/ 50 000 lignes c'est pas suffisant 2/ si ta requête retourne 10 000 lignes, c'est le fait de les lire physiquement qui prend du temps, pas de les retrouver.


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

  optimisation des requetes SQL

 

Sujets relatifs
SQL pas tres dur mais je suis nul :)Requête SQL
PRobleme requette SQLRequête sous Access, mode création ou SQL
Formulaire (SQL)Sql : access denied..
SQL : requêtes multibasesOptimisation requêtes SQL !
[SQL] Optimisation de requêtesSuite optimisation des requêtes SQL
Plus de sujets relatifs à : optimisation des requetes SQL


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