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

MS SQL Server Discussion :

[expert] ISNULL ou is null


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut [expert] ISNULL ou is null
    (pour SQL PRO)
    bonjour,

    je te vois souvent écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE correctionStatus >=0 OR correctionStatus  IS NULL
    au lieu d'utiliser les fonctions ISNULL ou COALESCE. exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ISNULL(correctionStatus,0) >=0
    je sais que pour les précédentes versions de SQL serveur type la 7, le fait d'utiliser une fonction faisait que le moteur ne pouvait pas utiliser les index; mais depuis la version 2000 ce n'est plus le cas d'après crosoft. Donc le pb de rapidité n'est plus d'actualité.

    tu as des infos la dessus ?

    merci

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Je te prie de m'excuser de répondre, même si je ne suis pas SQLPro

    Ton information est fausse : SQL Server ne peut pas utiliser d'index quand la colonne est passée dans une fonction. On indexe une colonne, pas le résultat d'une fonction. La solution 2 ne peut donc jamais utiliser d'index.

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    excuses Rudib, mais j'avais mis SQL pro car c'est dans SES réponses sur le forum que voyais le plus souvent çà.

    ceci mis a part,

    Ton information est fausse : SQL Server ne peut pas utiliser d'index quand la colonne est passée dans une fonction. On indexe une colonne, pas le résultat d'une fonction. La solution 2 ne peut donc jamais utiliser d'index
    je suis d'accord, mais, a ma connaissance, les valeurs nulles ne sont pas stockées dans les index, donc full scan table ?

    il me semble que j'avais lu (mais je ne me souviens pas où) que depuis la version 2000, le moteur créais un pseudoindex du même style que sous oracle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create index idx1 on table tbl (nvl(champ1,'null'))
    tu l'as déjà entendu?

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Même si on ne le voit pas via un DBCC SHOW_STATISTICS, les NULL sont bien référencés dans l'index. Je ne crois pas que ce soit par un pseudo-index, jamais entendu parler. Je vais essayer de trouver une info précise.

    "WHERE colonne IS NULL" peut en tout cas utiliser l'index.

    Il n'y a pas d'index sur les expressions en SQL Server

  5. #5
    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 n'y a pas d'index sur les expressions en SQL Server
    Sauf colonne calculée indexée ou vue indexée.

    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/ * * * * *

Discussions similaires

  1. [AC-2000] IsNull() ou Is Null
    Par kerseb dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/09/2012, 10h54
  2. fonction isnull en JPQL (et pas IS NULL)
    Par jmturc dans le forum JPA
    Réponses: 3
    Dernier message: 08/12/2010, 21h16
  3. [CRX] Expert selection sur un champ NULL
    Par Aitone dans le forum Formules
    Réponses: 1
    Dernier message: 04/08/2008, 10h47
  4. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2003, 10h00
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07

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