Optimiser une requete SQL

 
syrx20
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 179
Inscription: Ven Aoû 12, 2005 20:40

Optimiser une requete SQL

Message le Jeu Mai 15, 2008 10: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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 447
Inscription: Dim Avr 15, 2007 18:14

Message le Jeu Mai 15, 2008 10: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 occasionnel
WRInaute occasionnel
 
Messages: 123
Inscription: Sam Fév 16, 2008 18:14

Message le Jeu Mai 15, 2008 10:48

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

syrx20
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 179
Inscription: Ven Aoû 12, 2005 20:40

Message le Jeu Mai 15, 2008 10:48

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


Bacteries
WRInaute accro
WRInaute accro
 
Messages: 1267
Inscription: Jeu Mai 27, 2004 14:04

Message le Jeu Mai 15, 2008 11: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 passionné
WRInaute passionné
 
Messages: 656
Inscription: Ven Fév 13, 2004 21:33

Re: Optimiser une requete SQL

Message le Jeu Mai 15, 2008 11: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 occasionnel
WRInaute occasionnel
 
Messages: 179
Inscription: Ven Aoû 12, 2005 20:40

Message le Jeu Mai 15, 2008 11:22

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

Merci Bacteries

jarreweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 191
Inscription: Ven Sep 12, 2003 9:17

Message le Jeu Mai 15, 2008 13:46

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

syrx20
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 179
Inscription: Ven Aoû 12, 2005 20:40

Message le Ven Mai 16, 2008 11:42

c instantané :)

 

Modérateurs: WebRankInfo, e-kiwi, OTP, fandecine, Patrice A.

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

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