Select lent avec Inner Join et Order

vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006 - 11 avril 2005 à 13:34
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006 - 13 avril 2005 à 07:38
Bonjour,

Je souhaite trier une table table1 en fonction d'un champ d'une table2.
Ces deux tables ont un champ qui les lient : table1.id_table2 et table2.id.

Voici la requête que j'ai écrit.

select distinct table1.id from table1, table2
inner join table2 on table1.id_table2 = table2.id
order by table2.field_to_sort


Le hic, c'est qu'elle est lente : plus de 7 à 8 secondes alors table1 et table2 comporte chacunes +/- 600 record.

Sans le inner join et l'order by, la requête est exécutée immédiatement.



Pour info, table1.id et table2.id sont des primary keys et il existe un index sur table1.id_table2 et sur table2.field_to_sort



Une petite idée SVP



Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans
A voir également:

2 réponses

bidoch78 Messages postés 67 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 2 décembre 2005
12 avril 2005 à 16:08
Essayes plutot :

Si c'est pas génant d'avoir table1.Id et table2.field_to_sort en retour tu peux faire
SELECT distinct table1.id, table2.field_to_sort
FROM table1 INNER JOIN table2 ON table1.id_table2 = table2.id
ORDER BY table2.field_to_sort

sinon

SELECT distinct QRY.Field1 AS Id
FROM
(SELECT table1.id AS Field1, table2.field_to_sort
FROM table1 INNER JOIN table2 ON table1.id_table2 = table2.id
ORDER BY table2.field_to_sort) AS QRY

note : tu ne dois pas avoir besoin du DISTINCT si comme tu le dis table1.id est une clé primaire

Bidoch78
0
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
13 avril 2005 à 07:38
Après une bonne nuit de
sommeil, je me suis demandé pourquoi j'ajoutais table2 dans la clause
from du select alors que je ne souhaite aucun champ en retour en
provenance de la table2.



Bref, j'ai essayé ceci :

select distinct table1.id from table1 inner join table2 on table1.id_table2 = table2.id order by table2.field_to_sort.





Cela marche vachement mieux, je pense qu'il y a encore moyen de faire plus vite



Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.




Vincent Stryckmans.

Leur liberté, c'est la nôtre. Agissons!

htp://www.pourflorenceethussein.org
0
Rejoignez-nous