optimisation de requete

optimisation de requete - SQL/NoSQL - Programmation

Marsh Posté le 06-04-2006 à 10:04:16    

Tout d'abord, j'utilise mysql 4.1
 
je travail sur 2 tables et le but est de remonter un groupe de 5 champs se traouvant dans la table1 et pas dans la table2
 
j'ai essayé ceci, ça fonctionne mais c'est long (plus de 2 min), les 2 tables on environ 7000 eregistrement et je remonte 23 lignes de resultat.

Code :
  1. SELECT t1.c1, t1.c2, t1.c3, t1.c4, t1.c5 FROM table1 t1
  2. LEFT JOIN table2 t2
  3. ON (t1.c1=t2.c1 and t1.c2=t2.c2 and t1.c3=t2.c3 and t1.c4=t2.c4 and t1.c5=t2.c5)
  4. WHERE valeur<>0
  5. and t2.c1 is null
  6. and t2.c2 is null
  7. and t2.c3 is null
  8. and t2.c4 is null
  9. and t2.c5 is null

 
 
y a t'il une possibilité d'optimiser la requete pour que ce soit plus rapide.  
 
merci

Reply

Marsh Posté le 06-04-2006 à 10:04:16   

Reply

Marsh Posté le 06-04-2006 à 10:15:59    

oui ajoute un ou plusieurs indexes
vu la tronche de la requête je te dirais d'ajouter un index sur les 5 champs, tu passeras à une exécution d'une dizaine de secondes

Reply

Marsh Posté le 06-04-2006 à 10:27:00    

sinon tu peux tenter de faire la requete avec un not exists plutot qu'une jointure...

Reply

Marsh Posté le 06-04-2006 à 10:58:11    

je vais essayer les indexes, le not exists n'a pas l'air de fonctionner avec la version que j'utilise.

Reply

Marsh Posté le 06-04-2006 à 11:02:44    

Reply

Marsh Posté le 06-04-2006 à 11:24:43    

voila ma requete

Code :
  1. SELECT t1.c1, t1.c2, t1.c3, t1.c4, t1.c5 FROM table1 t1
  2. where not exists (select t2.c1, t2.c2, t2.c3, t2.c4, t2.c5 from table2 t2
  3. where t1.c1=t2.c1 and t1.c2=t2.c2 and t1.c3=t2.c3 and t1.c4=t2.c4 and t1.c5=t2.c5)


 
j'avais une close sue valeur qui appartien à t1  
valeur<>0 où la placer?

Reply

Marsh Posté le 06-04-2006 à 11:51:57    

Code :
  1. SELECT
  2.  t1.c1,
  3.  t1.c2,
  4.  t1.c3,
  5.  t1.c4,
  6.  t1.c5
  7. FROM
  8.  table1 t1
  9. WHERE
  10.  t1.valeur <> 0 AND
  11.  NOT EXISTS (
  12.    SELECT
  13.      t2.c1 FROM table2 t2
  14.    WHERE
  15.       t1.c1=t2.c1 AND
  16.       t1.c2=t2.c2 AND
  17.       t1.c3=t2.c3 AND
  18.       t1.c4=t2.c4 AND
  19.       t1.c5=t2.c5
  20. )


Reply

Sujets relatifs:

Leave a Replay

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