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 :

Différences de performances deux requêtes


Sujet :

Développement SQL Server

  1. #1
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 795
    Points : 3 173
    Points
    3 173
    Par défaut Différences de performances deux requêtes
    Bonjour, pour une fois c'est moi qui ai une question...
    Sous SQL SERVER 2008 R2:
    Mon soucis n'en est pas vraiment un mais un cas que je ne saurais expliquer:
    Voici deux requetes (simplifiées) à priori identiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @value VARCHAR(50)=dbo.FN_TRANSFORM_FOR_SEARCH('refer') 
    SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE( '%'+@value+'%')-->10ms 
     
    SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE('%'+dbo.FN_TRANSFORM_FOR_SEARCH(@value)+'%') -> 2,5 secondes
    Même plans d’exécutions...(voir fichiers joints) sauf un tri a priori peu coûteux, même nombre d'IO.



    Précision: FN_TRANSFORM_FOR_SEARCH est une fonction scalaire dérivée de celle de SQL PRO:
    http://blog.developpez.com/sqlpro/p7...ction-de-corr/
    Images attachées Images attachées   
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Ta fonction est-elle déterministe (et reconnue comme tel par SQL Server ) ?

  3. #3
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Tu as raison c'est exactement çà.
    La requête postée est appelée dans une fonction table... et impossible de repasser dans une SP.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    ôtes moi d'un doute...

    pour la deuxième, tu fais bien
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DECLARE @value VARCHAR(50)=('refer')

    c'est ce que je suppose, puisque tu dis qu'elles sont quasi identiques...

    -----

    qu'est ce-que ça donne si tu declares ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WITH SCHEMABINDING

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Pardon cela peut prêter à confusion en effet:
    Première requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @value VARCHAR(50)=dbo.FN_TRANSFORM_FOR_SEARCH('refer') 
    SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE( '%'+@value+'%')-->10ms
    Deuxième requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 20 * FROM dbo.ITEM_SEARCH WHERE VALUE LIKE('%'+dbo.FN_TRANSFORM_FOR_SEARCH(@value)+'%') --> 2,5 secondes
    @value étant dans le second cas le paramètre d'entrée de ma fonction TABLE.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Cela fonctionne un grand merci à toi... j'avais déclaré with schemabinding sur la fonction appelée dans FN_TRANSFORM_FOR_SEARCH mais pas FN_TRANSFORM_FOR_SEARCH elle même.

    Merci pour ton aide
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    de rien

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

Discussions similaires

  1. [AC-2007] Différence entre deux requètes
    Par leridant dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/11/2013, 16h29
  2. Performances comparées de deux requêtes
    Par klopi dans le forum Développement
    Réponses: 20
    Dernier message: 16/11/2010, 13h46
  3. Réponses: 4
    Dernier message: 07/01/2010, 12h27
  4. Différence entre deux "requêtes"
    Par zaventem dans le forum Développement
    Réponses: 3
    Dernier message: 16/03/2009, 12h01
  5. Différence entre deux requêtes
    Par viny dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/10/2006, 16h28

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