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

MS SQL Server Discussion :

Plantage d'une requête SELECT


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut Plantage d'une requête SELECT
    [SQLEXP2005]
    J'ai un plantage sur SQL Server Management Studio Express
    sur la requete suivante :

    SELECT DISTINCT
    acmouvement.nom
    FROM acmouvement
    LEFT OUTER JOIN acmanagementunit_move ON acmouvement.pkid=acmanagementunit_move.ID_move
    LEFT OUTER JOIN acunitegestion ON acmanagementunit_move.ID_managementunit=acunitegestion.pkid
    WHERE
    acmouvement.date_mvt >= CONVERT(datetime, '2008-11-27 09:22:46', 20)
    AND
    acmanagementunit_move.ID_managementunit = 27

    La requete ne se finit jamais !!!

    Rien de logique dans tout ça car :
    Cà marche si j'enlève DISTINCT
    Ca marche si je modifie la date par '2008-11-26 09:22:46'
    Ca marche si je modifie la date par '2008-11-27 03:22:46'
    Ca marche si au lieu du nom je select acmouvement.pkid

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    De quel type sont vos colonnes :

    - acmouvement.pkid
    - acmanagementunit_move.ID_move
    - acmanagementunit_move.ID_managementunit
    - acunitegestion.pkid

    et sont-elles indexées ?

    De quel type est acmouvement.date_mvt ? chaîne, SMALLDATETIME ou DATETIME, et est-elles indexée ?

    Avez-vous regardé le plan de requête de votre commande (CTRL+L)?

    @++

  3. #3
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut
    acmouvement.pkid : int non null
    acmouvement.date_mvt : datetime

    acmanagementunit_move.ID_move : int
    - acmanagementunit_move.ID_managementunit: int

    acunitegestion.pkid : int

    Non ils ne sont pas indexés

    Tous les champs pkid sont des champrs Identité qui s'auto incrémentent de 1

    En fait après étude, la requête ne plante pas mais elle dure plus de 8 minutes.

    Si j'effectue la recherche sur des mouvements datés après le 26 Novembre, la requête s'effectue en moins d'une seconde.
    Sachant que les mouvements datés d'après le 27 sont obligatoirement daté après le 26, la requête sur le 26 me retourne donc plus de mouvements que celle du 27 et pourtant elle prend plus de 8 minutes !!!!

  4. #4
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut
    J'ai le plan d'exècution de la requête .

    La version rapide : rapide.gif avec une recherche postérieure au 26 11
    SELECT DISTINCT
    acmouvement.nom
    FROM acmouvement
    LEFT OUTER JOIN acmanagementunit_move ON acmouvement.pkid=acmanagementunit_move.ID_move
    WHERE
    (acmouvement.date_mvt >= CONVERT(datetime, '2008-11-26 12:24:02', 20) )
    AND
    (acmanagementunit_move.ID_managementunit = 27 )
    ORDER BY acmouvement.nom ASC


    La version 8 minutes : lent.gif avec une recherche postérieure au 27/11

    SELECT DISTINCT
    acmouvement.nom
    FROM acmouvement
    LEFT OUTER JOIN acmanagementunit_move ON acmouvement.pkid=acmanagementunit_move.ID_move
    WHERE
    (acmouvement.date_mvt >= CONVERT(datetime, '2008-11-27 12:24:02', 20) )
    AND
    (acmanagementunit_move.ID_managementunit = 27 )
    ORDER BY acmouvement.nom ASC



    Je ne comprend vraiment pas pourquoi en modifiant un critère de recherche la requête passe de 1 seconde à 8 minutes !!!!

    Il faut savoir également que j'ai plus de 165 000 lignes dans la table acmouvement et plus de 170 000 lignes dans acmanagementunit_move.
    Images attachées Images attachées   

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    N'auriez-vous pas inversé les noms de vos captures ?
    Dans tous les cas les icônes Table Scan sont, dans votre cas, synonymes de lenteur.
    Regardez le prédicat lié à cette icône et réalisez l'indexation.

    Non ils ne sont pas indexés
    Ne cherchez pas plus loin ...

    @++

  6. #6
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Par défaut Résolu
    Ok j'ai compris
    LA notion de clé sur mes pkid avaient disparu de mes scripts de création de base.
    J'ai remisces notions de clé primares sur mes pkid et ça marche !!!

    Merci encore de m'avoir orienté sur les indexes !!!!

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    En effet, l'ajout d'une clé primaire sous SQL Server implique la création d'un index cluster

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec les résultats d'une requête select top1
    Par kariiim dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/03/2007, 15h05
  2. [MySQL 5]Performance d'une requêtes select
    Par SuperCed dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/08/2006, 12h51
  3. une requête SELECT INTO provoque un plantage sous Access
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/12/2005, 11h35
  4. fusion de 2 colonnes dans une requête select?
    Par epeichette dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/11/2005, 23h05
  5. C'est possible dans une requête SELECT ?
    Par Kokito dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2005, 16h59

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