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

Administration SQL Server Discussion :

Curseur plus performant que SELECT TOP 1 DELETE


Sujet :

Administration SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut Curseur plus performant que SELECT TOP 1 DELETE
    Hello !
    Depuis un certain temps je fais tout pour éviter d'utiliser les curseurs de façon explicite. Et j'en étais fier de ne pas utiliser les curseurs Et les arguments ne manquent pas pour justifier ce choix...Mais à ma grande déception le curseur explicite est plus performant que mes SELECT TOP1 ... DELETE. (Voir Démo)
    A quelques heures de mon départ en vacances je voudrais partager avec vous ma réflexion qui est la suivante :
    Quelle(s) solution(s) performante(s) pour éviter d'utiliser les curseurs ?

    Merci d'avance
    Etienne ZINZINDOHOUE
    Billets-Articles

  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 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Un temps CPU est par nature TRES aléatoire. Il faudrait faire un "tir" de ces deux méthodes de nombreuses fois avec la concurrence (mutiples utilisateurs simultanés).
    De plus vider tous les caches n'a aucun sens, car vous mesurer la capacité de votre disque à porter les données dans le cache cache... En principe toutes vos données devrait être systématiquement en cache (Cache hit ratio ne devant pas descendre en dessous de 95%).
    Enfin, c'est avec un volume de données appréciables, c'est à dire sur un parcours de données dont la volumétrie est supérieure à la RAM que vous devez faire des mesures, car sinon, vous ne mesurer que la capacité de réponse du cache !

    Bref, votre demo est totalement en dehors de ce qu'il faut faire pour mesurer les choses en production....

    ENFIN, il n'y a pas UNE solution performante, mais plusieurs manière à adapter selon vos besoins : http://sqlpro.developpez.com/cours/s...r_avoidCursor/



    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 émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Merci SQLPro pour cette réponse, je viens d'enrégistrer une copie de ton article pour le lire posément. Mais avant de faire des tests dans un environnement idéal, comment justifier le fait que dans mon cas, le curseur est plus performant que ma requête ? Aussi il m'arrive de choisir entre 2 requêtes celle qui est la plus optimisée (ou d'optimiser des requêtes pour des collègues). Pour celà je me base sur le temps CPU et le nombre de page logiques lues. Comme indiqué dans mon billet (le lien ci-dessus)).
    Comment obtenir des mesures fiables (durée d'exécution, nb de pages logiques,..) sans passer par le SQL Profiler ?
    Merci d'avance
    Etienne ZINZINDOHOUE
    Billets-Articles

  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 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    comment justifier le fait que dans mon cas, le curseur est plus performant que ma requête ?
    Le faible volume des données est souvent à l'avantage de techniques sales. Dans le cas du curseur comparé à la requête, c'est souvent le temps de calcul du plan de requête qui est pénalisant....

    Citation Envoyé par zinzineti Voir le message
    Aussi il m'arrive de choisir entre 2 requêtes celle qui est la plus optimisée (ou d'optimiser des requêtes pour des collègues). Pour celà je me base sur le temps CPU et le nombre de page logiques lues. Comme indiqué dans mon billet (le lien ci-dessus)).
    Comment obtenir des mesures fiables (durée d'exécution, nb de pages logiques,..) sans passer par le SQL Profiler ?
    Il faut avoir un volume de données suffisamment proche de la réalité, et surtout consistant ! Sur un faible volume cela n'a pas de sens...
    Après, il faut voir "en concurrence", c'est à dire dans la production réelle, car les verrous poser sur les ressources seront beaucoup plus pénalisant et pèserons sur le temps d'exec....

    A +

    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 émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Le faible volume des données est souvent à l'avantage de techniques sales. Dans le cas du curseur comparé à la requête, c'est souvent le temps de calcul du plan de requête qui est pénalisant....



    Il faut avoir un volume de données suffisamment proche de la réalité, et surtout consistant ! Sur un faible volume cela n'a pas de sens...
    Après, il faut voir "en concurrence", c'est à dire dans la production réelle, car les verrous poser sur les ressources seront beaucoup plus pénalisant et pèserons sur le temps d'exec....

    A +

    A +
    Ok merci.
    Etienne ZINZINDOHOUE
    Billets-Articles

Discussions similaires

  1. [Optimisation] Delete beaucoup plus lent que select
    Par GyZmoO dans le forum Requêtes
    Réponses: 17
    Dernier message: 18/07/2017, 19h08
  2. Réponses: 31
    Dernier message: 22/04/2014, 14h55
  3. simple select plus performant que procédure stockée
    Par dens19 dans le forum Développement
    Réponses: 5
    Dernier message: 01/09/2010, 10h36
  4. <option> plus large que <select>
    Par sunvialley dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/11/2006, 16h02
  5. [CSS] option plus grand que select
    Par simoryl dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 11/01/2006, 19h27

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