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 :

Accélerer requêtes statistiques


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Points : 28
    Points
    28
    Par défaut Accélerer requêtes statistiques
    Bonjour a tous,

    j'ai écrit un programme qui permet l'interrogation de statistiques selon plusieurs filtres et sur plusieurs regroupements possibles.

    Je crée donc des requêtes dynamiques en fonction du choix des utilisateurs et celles si sont construites à base de group by with rollup

    Ca fonctionne bien sauf que j'aimerasi que ce soit encore plus rapide ! En effet ma table principale approche du million de lignes et je pense (peut être à tort) qu'avec ce système mon programme va être de plus en plus lent avec le temps et le nombre de lignes qui augmente.

    J'aimerais créer des tables "résumées" qui stockeraient les résultats des années/mois précédents de mes statistiques de façon à ne pas recalculer des choses qui ne bougent plus. Le raisonnement est il correct ? si oui comment implémenteriez vous ca ? Peut être avez vous d'autres idées ?

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Vous avez raison de chercher une autre solution, et vous êtes sur la bonne piste .
    Vous pouvez faire cela en créant une vue indexée, qui vous procurera de bonnes performances, puisque vous utilisez des agrégats (MIN(), MAX(), AVG(), COUNT(), ...).
    En revanche les vues indexées sont sujettes à quelques restrictions que vous trouverez iciL'instruction SELECT de la vue ne peut pas contenir les éléments syntaxiques Transact-SQL suivants :).

    Mais il est aussi probable qu'il soit plus intéressant pour vous de créer des cubes OLAP de données ...

    @++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Merci elsuket

    Effectivement la solution des vues indexées me parait être la bonne !

    Par contre même si j'en comprends le principe, la mise en oeuvre est encore floue : quelle requête doit servir de "base" pour la création de la vue ?? j'ai des dizaines de regroupements possibles, faut il que je fasse x vues correspondants à chaque regroupement ou alors une seul vue avec juste un regroupement par date ?

    Enfin comment être sûr que SQL SERVER utilisera bien la vue dans le plan de requête. A priori toutes les versions de SQL ne sont pas capables d'intégrer la vue automatiquement si on ne la précise par dans le FROM. J'ai une version standard 2005

  4. #4
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    quelle requête doit servir de "base" pour la création de la vue
    Toute requête SELECT, tant qu'elle respecte les restrictions que liste le lien que je vous ai donné.

    j'ai des dizaines de regroupements possibles, faut il que je fasse x vues correspondants à chaque regroupement ou alors une seul vue avec juste un regroupement par date ?
    Votre question est trop floue pour pouvoir y répondre précisément.
    Si vous pouvez réaliser tous les agrégats dans une seule et même vue, pour quoi pas, mais j'en doute
    Rien ne vous empêche néanmoins de créer plusieurs vues indexées, mais prenez garde dans ce cas à ne jamais indexer plusieurs fois les mêmes colonnes des mêmes tables qui participent à la requête de spécification de la vue.

    Enfin comment être sûr que SQL SERVER utilisera bien la vue dans le plan de requête
    Il vous suffit de spécifier la vue dans la requête, comme vous le feriez avec une table : après un FROM, un JOIN, ...

    Cela dit SQL Server peut déterminer qu'il lui est plus avantageux, suivant la requête et l'évolution des statistiques de colonnes, d'utiliser directement les tables sous-jacentes.
    Vous pouvez, pour éviter ce comportement les indicateurs de requête
    - EXPAND VIEWS, qui spécifie à l'optimiseur de ne pas utiliser les index de la vue,
    - NOEXPAND pour forcer l'utilisation des index de la vue.

    Mais il vaut mieux laisser faire cela à SQL Server qui est plus au courant que vous de l'évolution des données, sauf si vous avez déterminé avec les tests adéquats qu'il ne se comporte pas de la façon la plus performante

    @++

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

Discussions similaires

  1. Créer une requête statistiques
    Par MARCO63 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/01/2008, 22h47
  2. requête statistiques journalière
    Par evarisnea dans le forum Langage SQL
    Réponses: 8
    Dernier message: 23/05/2007, 14h41
  3. [SQL] requête statistique
    Par gandf dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/05/2007, 20h42
  4. [Débutant] Requête statistique simple
    Par drthodt dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 14/10/2005, 09h50
  5. Requête statistique.
    Par abdelghani_k dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/08/2005, 19h39

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