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 :

Table temporaire contre performent ?


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut Table temporaire contre performent ?
    Bonjour à tous,

    J'ai vu qu'il était déconseillé dans le mesure du possible d'utiliser les Table temporaire, cependant est ce que ça peut se justifier ? Et à quel prix ?

    Si on se trouve avec un nombre important de condition qui serait difficile à modéliser dans une requête simple ... Est ce un choix satisfaisant ?

    Bien sûre que ça dépends beaucoup des cas d'utilisations et des attentes, mais y a t il des pratiques, critères qui permette un arbitrage ? (Ca peut être des méthodologie, des études ... ect).

    De façon générale un DBA quand il voit une requête avec une Table Temporaire (construite avec des Union's ...) et quand il voit qu'il y a des Delete's sur la table temporaire.
    Et qu'enfin il y est d'autres critères dans un Select finale, que se dit il ?

    1 - Ce n'est pas acceptable, y a forcément mieux à faire ?
    2 - Peut être qu'il est intéressent de faire un test sur les temps de réponse ?
    3 - Une grande complexité du métier peut justifier cela ?

    Ou la pire des réponses :

    4 - Si on en arrive à écrire de telles requêtes, il y a forcément une mauvaise étude/conception ?


    Je m'excuse si ma question est un peu trop général, mais c'est surtout les bonnes pratiques que je cherche à connaitre dans un tel cas.

    Si vous me dites qu'il est impossible de répondre sans exemple claire, j'essaierai d'en faire un.

    Merci de m'avoir lu et au plaisir de lire vos réponses.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Je dirais que selon le cas, si c'est un développeur débutant qui a écrit, il est possible d'être dans le cas 1.
    Il m'est arrivé également de me trouver dans le cas 3 avec un modéle en 3 eme forme normal.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    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 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    Commencez par lire l'article que j'ai écrit à ce sujet :
    http://blog.developpez.com/sqlpro?ti...et_persistance

    J'ai vu qu'il était déconseillé dans le mesure du possible d'utiliser les Table temporaire, cependant est ce que ça peut se justifier ? Et à quel prix ?
    Une différence dans le pire des cas d'un facteur 1000. Est-ce suffisant ??? L'explication est dans le lien ci avant...

    Si on se trouve avec un nombre important de condition qui serait difficile à modéliser dans une requête simple ... Est ce un choix satisfaisant ?
    Jamais ! Sauf si votre ambition est sciemment de pourrir les performances de votre système.
    Bien sûre que ça dépends beaucoup des cas d'utilisations et des attentes, mais y a t il des pratiques, critères qui permette un arbitrage ? (Ca peut être des méthodologie, des études ... ect).
    Oui il y a un simple état de l'art contre un coût. Si le développeur va mettre 6 jours à écrire la requête alors qu'avec une série de 3 tables temporaire il mettra 4h, alors la balance est à étudier... Mais il y a fort à parier qu'il faudra y revenir par la suite !

    De façon générale un DBA quand il voit une requête avec une Table Temporaire (construite avec des Union's ...) et quand il voit qu'il y a des Delete's sur la table temporaire.
    Et qu'enfin il y est d'autres critères dans un Select finale, que se dit il ?
    Que le niveau de connaissance en SQL de celui qui a écrit cela le rend incompétent à développer des applications bases de données. C'est en tout cas ce que je dit dans mes audits. Ce qui signifie qu'il faut former ces développeurs.

    1 - Ce n'est pas acceptable, y a forcément mieux à faire ?
    Oui

    2 - Peut être qu'il est intéressent de faire un test sur les temps de réponse ?
    Non

    3 - Une grande complexité du métier peut justifier cela ?
    Balance entre cout et savoir.


    Ou la pire des réponses :

    4 - Si on en arrive à écrire de telles requêtes, il y a forcément une mauvaise étude/conception ?
    C'est possible, mais pas toujours !

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

  4. #4
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il est effectivement conseillé d'éviter autant que c'est possible l'utilisation de tables temporaires, quelles qu'elles soient (@, # ou ##).

    Cela se justifie par la pose de verrous sur la base de données système TempDB, qui est un pilier du moteur de base de données (parce que SQL Server la sollicite pour beaucoup de tâches, outre les requêtes).

    Ajoutez à cela les coûts en lectures disque (bien plus lentes que les accès en RAM), puisque vous accédez à d'autres fichiers de base de données.
    Certains vont même jusqu'à créer des transactions sur des tables temporaires ...

    Évidemment ce type de table est très pratique, mais ce que vos gagnerez à en créer est une maintenance supplémentaire.
    Depuis SQL Server 2005, qui a introduit les CTE, il devient très rare d'avoir recours à une table temporaire.

    Je préfère passer une journée sur une requête complexe que d'écrire la même requête en 10 minutes avec des tables temporaires, mais ce n'est pas l'avis de tout le monde ...
    Plus on s'habitue à écrire des requêtes complexes sans tables temporaraires (ni curseurs), et plus on les écrit vite ...

    @++

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Merci beaucoup pour vos réponses c'est simple claire et efficace ...

    D'une part vous me réconfortez dans ma pensée (pire encore je me rends compte que c'est plus terrible que ce que je croyais), d'autre part je me dis que ça va me donner du travail en plus, je vais faire une audite des requêtes et mettre tout cela en évol et optimisation ... Le problème est que moi je ne voulais pas utiliser les tables temporaires, mais non seulement c'était déjà utilisé un peu partout, mais en plus mon chef de projet technique me préconisait cette solution et me dissait qu'elle lui convenait ... Je seraismieux lui répondre la prochaine fois.

    Par ailleurs, le lien sur lequel vous me redirigez SqlPro, c'est un billet dans votre blog, mais y a t il un article sur ce sujet ? Ou l'article dont vous me parliez était le billet (car je ne vois pas de lien)

    merci encore
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Par ailleurs, le lien sur lequel vous me redirigez SqlPro, c'est un billet dans votre blog, mais y a t il un article sur ce sujet ? Ou l'article dont vous me parliez était le billet (car je ne vois pas de lien)
    La dernière partie de la phrase est correcte

    @++

Discussions similaires

  1. Variable de type TABLE contre Tables temporaires #Temp
    Par cfeltz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/06/2007, 21h02
  2. Table temporaire et résultat requête
    Par Royd938 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/07/2004, 14h24
  3. Suppression table temporaire...
    Par Royd938 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2004, 12h00
  4. [procédure stockée] table temporaire commençant par #???
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/04/2004, 12h23
  5. Nettoyage de table temporaire
    Par Alain Dionne dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/02/2004, 20h44

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