Optimiser une requete SQL

WRInaute discret
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
 
WRInaute impliqué
A tout hasard :

Code:
SELECT t.id_tournoi
FROM tournoi t
WHERE t.id NOT IN (
	SELECT i.id
	FROM inscription i
	WHERE i.id_personne=1
)
 
WRInaute passionné
La solution de seebs me semble être ce que tu peux faire de mieux. Tes tables ont beaucoup d'enregistrement?
Tu as des index?
 
WRInaute accro
syrx20 a dit:
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 dit:
ç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.
 
Discussions similaires
Haut