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 :

Coût d'un ISNULL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut Coût d'un ISNULL
    Bonjour à tous,
    Je découvre dans un système décisionnel, pour alimenter un cube, des requête qui permettent de transformer les champs NULL d'une tables par des -1.
    La vue fait un SELECT de tous les champs en ajoutant, presque pour chacun : ISNULL(MonChamp, -1) AS MonChamp.

    Mettant de côté l'aspect "propre" de la chose, est-ce que cela a un impact particulier ?
    Je parle de tables de faits de plusieurs millions de lignes interrogées sans filtre tous les jours.

  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
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Toute fonction entraîne un surcoût qui est loin d'être négligeable. D'autant plus qu'il faut s'interroger sur la structure de stockage qui peut avoir utilisé le principe des "sparse columns".

    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 Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Pour la structure de la table, je préfère ne pas en parler... une grande partie n'a même pas d'index cluster, que ce soit sur une PK ou une combinaison de FK.

    Ce surcoût, est-il mesurable "facilement" si ce n'est en exécutant 2 fois la requête, avec et sans. le problème étant que les tables sont particulièrement volumineuses et sont interrogées sans aucun filtre.
    Ce surcoût est-il proportionnel au volume ? s'appliquant sur chacune des lignes je dirai oui mais bon... il pourrait se noyer dans la masse.

  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
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Il est difficile d'évaluer le surcout sans faire des tests. En effet, une fonction étant généralement non "sargable" le plan de requête peut être très différent suivant l'utilisation ou non de ladite fonction.
    En bref, le rapport entre les deux requêtes peut aller bien plus loin que le double du coût !

    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 Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Merci pour ces précisions Frédéric.
    Je ferais donc des tests grandeur nature quand un serveur sera un peu plus disponible.

    Effectivement, comme cela ils gagnent potentiellement beaucoup de place dans leurs tables de fait, mais ils perdent potentiellement beaucoup de temps au traitement du cube (+ de 13h actuellement pour 48Go)...

  6. #6
    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,

    La vue fait un SELECT de tous les champs en ajoutant, presque pour chacun : ISNULL(MonChamp, -1) AS MonChamp.
    Cela étant, si le ISNULL() ne fait partie d'aucun prédicat, par exemple :

    - INNER JOIN dbo.uneTable AS T ON T.uneColonne = ISNULL(S.une_colonne, -1)
    - WHERE ISNULL(T.uneColonne, 0) = 0

    Cela entraînera effectivement un surcoût, mais il sera négligeable.
    Dans le cas où le ISNULL() fait partie d'une prédicat, il est impossible pour SQL Server d'estimer combien de lignes dans la table vont vérifier le prédicat, donc il est au mieux obligé de lire tout un index, au pire de scanner toute la table ...

    @++

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

Discussions similaires

  1. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  2. Icône a coté du texte dans une ListBox
    Par joce3000 dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/12/2003, 02h25
  3. [Concept] Curseur coté client et curseur coté serveur
    Par freud dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/09/2002, 22h13
  4. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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