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 :

Top Group By : Optimisation


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut Top Group By : Optimisation
    Bonjour

    Voilà, je suis en SQL-8 sur SQL-Server 2000.

    Je cherche à retrouver les 5 premières commandes de chaque clients...

    Ma table (#test2) a deux clés pour le no de client (hcust et hship). En revanche nous n'avons qu'un seul numéro de commande (hord).

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select x1.hcust, x1.hship, x1.hord
    from #test2 x1
    	left join #test2 x2 on x2.hcust = x1.hcust and x2.hship = x1.hship and x2.hord > x1.hord
    group by x1.hcust, x1.hord, x1.hship
    having count(*) < 5
    order by 1,2
    Si ma table #test2 ne contient que quelques enregistrements, celle fonctionne bien. Mais dans les faits, je dois traiter 360'627 lignes... et lorsque je tente d'exécuter ma requête... après 20 minutes je me suis tannée et je l'ai arrêtée!

    Que puis-je faire pour optimiser le tout ?

    Merci beaucoup pour votre aide !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    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 : 22 042
    Billets dans le blog
    6
    Par défaut
    créez cet index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX X ON #test2  (hcust, hship, hord)
    Rejouez votre requête....

    Mieux, avec 2005, utilisez la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT hcust, hship, hord
    FROM
    (
    SELECT hcust, hship, hord, RANK() OVER(ORDER BY hcust, hord, hship) AS N
    FROM   #test
    ) AS T
    WHERE N <= 5
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut
    Bonjour,

    Je ne sais pas pourquoi je n'y ai pas pensé

    Cela a réduit de moitié le temps requis pour l'exécution de la requête... 10 minutes au lieu de 20 minutes environ... c'est déjà cela de gagné!

    Merci.

    Et pour ce qui est de SQL 2005, malheureusement nos serveurs ici ne sont pas encore migrés, mais c'est sur la liste de tâche à faire en 2008 !

    Baq'

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    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 : 22 042
    Billets dans le blog
    6
    Par défaut
    Cela me parait encore beaucoup... Quel est votre cache hit ratio (via le moniteur de performances...) au moment ou vous jouez cette requête ? Je parierait pour un manque de RAM...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut
    Bonjour,

    J'ai réussi à trouver le moniteur de performance, mais à quel endroit je peux voir le "cache hit ratio" ?

  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
    22 042
    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 : 22 042
    Billets dans le blog
    6
    Par défaut
    Votre moniteur de perf est-il en français ?

    C'est dans la catégorie SQL Server:Buffer...
    En français : taux de mise en cache dans les tampons (ou quelque ineptie de ce genre...)

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. [MySQL] Requête group by optimisable?
    Par GyZmoO dans le forum Requêtes
    Réponses: 8
    Dernier message: 09/12/2011, 15h42
  2. Probleme requete avec GROUP BY, optimisation, performance
    Par MatthieuFourcade dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/12/2009, 11h44
  3. [group by] Optimiser une sous requete
    Par if_zen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/01/2008, 17h15
  4. Optimisation du GROUP BY
    Par hackrobat dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/03/2006, 15h43
  5. Optimisation du group by
    Par Higgins dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/01/2004, 11h10

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