IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[performance] Query très lent


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut [performance] Query très lent
    Bonjour,

    je suis un peu coincé, donc je viens ici pour demander de l'aide si possible.

    J'ai un query que j'ai mis dans une View. Mais ce query est très lent (plus de 4s avec très peu de donnée). Je voulais savoir si quelqu'un pouvais m'aider à l'améliorer...

    Il est en Firebird 1.5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT C.ID, C.HOTEL_ID, C.NOM, ETAGE, OVERBOOK, TYPE_CHAMBRE_ID, T.NOM, DESCRIPTION, COULEUR, IMAGE_INDEX, 1 AS LIBRE
    FROM CHAMBRE C,  TYPE_CHAMBRE T, RESERVATION R
    WHERE TYPE_CHAMBRE_ID = T.ID AND R.CHAMBRE_ID = C.ID
    AND R.DATE_DEBUT <= CURRENT_DATE AND R.DATE_FIN >= CURRENT_DATE
    UNION
    SELECT C.ID, C.HOTEL_ID, C.NOM, ETAGE, OVERBOOK, TYPE_CHAMBRE_ID, T.NOM, DESCRIPTION, COULEUR, IMAGE_INDEX, 0 AS LIBRE
    FROM CHAMBRE C,  TYPE_CHAMBRE T, RESERVATION R
    WHERE TYPE_CHAMBRE_ID = T.ID AND R.CHAMBRE_ID = C.ID
    AND (R.DATE_DEBUT > CURRENT_DATE OR R.DATE_FIN < CURRENT_DATE)
    and C.ID not in (select chambre_ID from RESERVATION where DATE_DEBUT <= CURRENT_DATE AND DATE_FIN >= CURRENT_DATE)
    UNION
    SELECT C.ID, C.HOTEL_ID, C.NOM, ETAGE, OVERBOOK, TYPE_CHAMBRE_ID, T.NOM, DESCRIPTION, COULEUR, IMAGE_INDEX, 0 AS LIBRE
    FROM CHAMBRE C,  TYPE_CHAMBRE T
    WHERE TYPE_CHAMBRE_ID = T.ID AND C.ID NOT IN (SELECT CHAMBRE_ID FROM RESERVATION)
    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 111
    Points : 142
    Points
    142
    Par défaut
    Comme toujours, ajoutes des indexes sur les colonnes liées aux clauses where...

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Déjà, si tu es certain qu'il n'y a pas de doublons, remplace les UNION par des UNION ALL.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Médiat
    Déjà, si tu es certain qu'il n'y a pas de doublons, remplace les UNION par des UNION ALL.
    Il ne doit pas avoir de doublon...

    Cela va changer beaucoup? J'essaie

    Merci

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par eponette
    Cela va changer beaucoup? J'essaie
    Avec UNION, le moteur doit éliminer les doublons : donc un tri et des comparaisons...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    1) UNION ALL à la place de UNION

    2) CURRENT_DATE BETWEEN R.DATE_DEBUT AND R.DATE_FIN a la place de R.DATE_DEBUT <= CURRENT_DATE AND R.DATE_FIN >= CURRENT_DATE

    3) WHERE NOT EXISTS (SELECT * FROM RESERVATION WHERE CHAMBRE_ID = C.ID) à la place de :
    WHERE TYPE_CHAMBRE_ID = T.ID AND C.ID NOT IN (SELECT CHAMBRE_ID FROM RESERVATION)

    4) Effectuez des jointures NORMATIVES avec INNER JOIN au lieu de faire des produits cartésiens en faisant vos jointures dans le WHERE !

    A +

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    Bonjour à tou,
    Tout a déjà été dit, par nos pros du forum, mais ce topic, m'amméne à une question à propos de tes jointures normatives !
    Comment peux utiliser celle ci (inner join) dans le cadre d'une joint multiple >2 ??
    Merci d'avance pour ces précisions sur les perfs !

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Je ne comprend pas la notion de JOIN MULTIPLE ???

    C'est quoi ???

    As tu un exemple précis.

    merci de respecter ceci : http://www.developpez.net/forums/viewtopic.php?t=32668

    A +

Discussions similaires

  1. BDD sur réseau très très très lent...
    Par ericain dans le forum Access
    Réponses: 12
    Dernier message: 20/02/2015, 17h17
  2. [Performance Swing] Deplacement de JInternalFrame très lent
    Par Widiwi dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/02/2009, 00h38
  3. Problème de performance (très lent)
    Par Zolex dans le forum Langage
    Réponses: 29
    Dernier message: 30/03/2007, 09h40
  4. Ouverture et fermeture de base très lent...
    Par Tofdelille dans le forum Installation
    Réponses: 6
    Dernier message: 19/09/2006, 18h51
  5. SQL Server trés lent
    Par arwen dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 07/11/2003, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo