Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 14h42   #1
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
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.
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 15h54   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 958
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 958
Points : 17 789
Points : 17 789
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 16h13   #3
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
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.
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 08h54   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 958
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 958
Points : 17 789
Points : 17 789
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 10h35   #5
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
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)...
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 18h07   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Citation:
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 ...

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 19h02   #7
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
Effectivement, je parle bien de cas où la fonction ne fait partir d'aucun prédicat, simplement dans le Select.
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 20h36   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Effectivement, je parle bien de cas où la fonction ne fait partir d'aucun prédicat, simplement dans le Select.
Effectivement le surcoût doit être marginal puisque n'intervenant qu'en toute fin de requête, au moment de la restitution des données.

En revanche le surcoût peu être intéressant à quantifier dans des cas de requête faisant intervenir un DISTINT, un GROUP BY?
Comme le dit SQL PRO, le mieux dans votre cas est de tester
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h15.


 
 
 
 
Partenaires

Hébergement Web