Optimiser une requete SQL

syrx20
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 12 Aoû 2005

Optimiser une requete SQL

Message le Jeu Mai 15, 2008 9:31

Bonjour,

J'ai 3 tables TOURNOI,PERSONNE et INSCRIPTION et je cherche à savoir à quel tournoi la personne 1 n'est pas encore inscrit.

J'ai la requete suivante :
SELECT t.id_tournoi FROM tournoi t LEFT JOIN inscription i ON (t.id_tournoi = i.id_tournoi AND i.id_personne=1) WHERE i.id_tournoi is null

ça fonctionne mais le problème c'est qu'elle prend 30 secondes pour renvoyer un résultat :(

Quelqu'un aurait il une solution pour optimiser cela?

Merci


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Message le Jeu Mai 15, 2008 9:47

A tout hasard :

Code: Tout sélectionner
SELECT t.id_tournoi
FROM tournoi t
WHERE t.id NOT IN (
   SELECT i.id
   FROM inscription i
   WHERE i.id_personne=1
)

audit.referencement
WRInaute discret
WRInaute discret
 
Messages: 125
Inscription: 16 Fév 2008

Message le Jeu Mai 15, 2008 9:48

Sans avoir l'architecture de tes tables, ça va être très très dur de t'aider.

syrx20
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 12 Aoû 2005

Message le Jeu Mai 15, 2008 9:48

Merci pour ta réponse seebz mais j'ai déjà essayé et c'est pareil


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Jeu Mai 15, 2008 10:06

La solution de seebs me semble être ce que tu peux faire de mieux. Tes tables ont beaucoup d'enregistrement?
Tu as des index?

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2678
Inscription: 13 Fév 2004

Re: Optimiser une requete SQL

Message le Jeu Mai 15, 2008 10:17

syrx20 a écrit:J'ai 3 tables TOURNOI,PERSONNE et INSCRIPTION et je cherche à savoir à quel tournoi la personne 1 n'est pas encore inscrit.

J'ai la requete suivante :
SELECT t.id_tournoi FROM tournoi t LEFT JOIN inscription i ON (t.id_tournoi = i.id_tournoi AND i.id_personne=1) WHERE i.id_tournoi is null


Ca veut dire que tu as une entrée dans inscription pour chaque paire (tournoi,personne)? A moins qu'au bout du compte tout le monde (ou presque) doive être inscrit à tous les tournois, ça ne me paraît pas forcément être un très une bonne idée.

syrx20 a écrit:ça fonctionne mais le problème c'est qu'elle prend 30 secondes pour renvoyer un résultat :(

Quelqu'un aurait il une solution pour optimiser cela?


S'assurer qu'il y a un index sur id_personne pour la table inscription (et évidemment un index sur id_tournoi pour la table tournoi).

Jacques.

syrx20
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 12 Aoû 2005

Message le Jeu Mai 15, 2008 10:22

Honte sur moi...en effet, il manquait un index sur la table inscription

Merci Bacteries

jarreweb
WRInaute discret
WRInaute discret
 
Messages: 192
Inscription: 12 Sep 2003

Message le Jeu Mai 15, 2008 12:46

et le temps de réponse avec les index, ca donne quoi ?

syrx20
WRInaute discret
WRInaute discret
 
Messages: 184
Inscription: 12 Aoû 2005

Message le Ven Mai 16, 2008 10:42

c instantané :)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités