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

Développement SQL Server Discussion :

Optimisation temps d'éxécution d'une requête


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2011
    Messages : 125
    Points : 72
    Points
    72
    Par défaut Optimisation temps d'éxécution d'une requête
    Bonjour,

    Mon problème est que j'ai une table avec des millions de lignes et dés que j'éxécute une requête select le temps de réponse est trop lent. Celà peut prendre des minutes et des minutes. Je voulais savoir donc s'il y a une solution pour remédier à ce problème.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Tu peux mettre des index et surtout filtrer pour avoir seulement les données que tu veux.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2011
    Messages : 125
    Points : 72
    Points
    72
    Par défaut
    Oui j'ai pensé à ça mais si j'ai besoin d'utiliser la requête select * from maTable sans filtrer les données y'a pas d'autres moyens?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Pourquoi tu es obligé de faire ça ? tu veux savoir le nombre de ligne ?

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2011
    Messages : 125
    Points : 72
    Points
    72
    Par défaut
    Dans mon appli je veux récupérer toute les données dans un tableau et après filtrer les données selon les critères de recherche

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Points : 485
    Points
    485
    Par défaut
    Il vaut mieu que tu fasses une requête par type de tri que tu veux dans ton app

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2011
    Messages : 125
    Points : 72
    Points
    72
    Par défaut
    D'accord je vais réfléchir dans ce sens là. Merci

  8. #8
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Il faut absolument filtrer les données dans la requête SQL ! Tu ne peux pas récupérer plusieurs millions de lignes en mémoire pour les filtrer ensuite. Tu consommerais de la RAM, des IO disques et du réseau pour rien.
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  9. #9
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Ca n'a pas de sens, récupérer un million de ligne dans un tableau est stupide, aucune personne ne va parcourir votre tableau ...

    Au minimum vous devez paginer vos données afin de n'afficher que les 20 premiers par exemple...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  10. #10
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    On se retrouve dans les problématiques du chuncky-chatty.

    Je comprends que tu veuilles récupérer l'ensemble de tes données et filtrer par la suite au niveau du client. Le tri et la pagination côté client reste relativement simple via les contrôleurs built-in.

    Le problème est que cette méthode n'est viable que si la quantité de données reste assez faible. Dès que tu dois charger une volumétrie importante on arrive vite aux limites de cette méthode :

    - Chargement inutile de la mémoire côté SQL Server (potentielle contention mémoire + IO disques)
    - Chargement important de la mémoire côté client ... il faut bien les stocker quelque part ses données ...

    Comme te l'expliquent fozzeuh, darkelend et iberserk il vaut mieux faire du chatty ici et faire des petits chargements de données et introduire de la pagination côté SQL Server. C'est vrai que côté client cela demande un peu plus de travail mais c'est au prix des performances :-)

    ++

  11. #11
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    C'est vrai que côté client cela demande un peu plus de travail
    Avec du LINK TO ENTITIES ou LINQ TO SQL c'est même devenu d'une simplicité rare:
    Par exemple pour avoir la page 2 d'un tableauavec 20 éléments par pages:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyLines.Skip(20).Take(20).ToList();
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2011
    Messages : 125
    Points : 72
    Points
    72
    Par défaut
    Merci pour vos réponses. C'est sur ces idées là que je me suis basé.

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

Discussions similaires

  1. Optimisation du temps d'exécution d'une requête
    Par LeNovice dans le forum DB2
    Réponses: 6
    Dernier message: 12/07/2007, 13h47
  2. Comment optimiser les temps de réponse d'une requête ?
    Par renaudjuif dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/02/2007, 14h12
  3. Réponses: 5
    Dernier message: 24/10/2005, 18h49
  4. Estimer le temps d'ouverture d'une requête
    Par WebPac dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/12/2004, 13h53
  5. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48

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