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 :

Création de table temporaire sur SQL server


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 24
    Points
    24
    Par défaut Création de table temporaire sur SQL server
    Bonjour,

    Je souhaiterais vous poser quelques questions pour connaitre votre avis.
    J'ai créé une requète X qui se basent elle-mêmes sur des requetes Y et Z (que je pense bien optimisées, et je ne monte pas à plus d'un niveau de requête) et je me rends compte que le résultat met longtemps à s'afficher, du fait des longs calculs (énormément de données). Je précise que quand je lance Y ou Z indépendamment, elles affichent des temps corrects.
    J'ai ensuite tenté une autre technique pour tester. Lorsque je crée 2 tables temporaires et intermédiaires Y_temp et Z_ temp (se basant sur leurs requètes respectives), et que j'utilise la requète X se basant sur ces nouvelles tables temporaires Y_temp et Z_temp, je me rends compte que les temps sont juste exceptionnels. Je trouve extrèmement curieux que les temps soient si long lorsque l'on fait des requètes sur des requètes lourdes.

    Mes questions :
    1 - Est ce que c'est normal/courant de passer par des tables temporaires?
    2 - Est ce que c'est conseiller ? déconseiller ?
    3 - Est ce la pire façon de faire ? Est ce du bricolage, bidouillage ?
    4 - Est ce que l'on doit forcément passer uniquement par des requètes pour avoir un programme solide ?

    Merci à vous.

  2. #2
    Membre averti
    Avatar de taibag
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 214
    Points : 357
    Points
    357
    Billets dans le blog
    1
    मैं एक छात्र हूँ |

  3. #3
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Etant donné que les # et @ Table ne sont pas toujours performantes, est-ce qu'une CTE pourrait serait suffisante?

    Du fait de sa portée limitée à une exécution immédiate, cela peut-être limité contrairement à des tables accessible en session.

    Cependant, les performances des CTE ne sont plus à démontrer et le côté pratique de l'imbriquage et de votre besoin me semble une bonne idée.

    Ex :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ;WITH maCTE1 AS (
       SELECT id_client, Total_HT, Total_HT * 1,196 AS Total_TTC
         FROM dbo.T_Factures )
    , maCTE2 AS (
       SELECT C.id_client, C.nom_client, Total_HT, Total_TTC
         FROM dbo.Clients C
               INNER JOIN maCTE1 T ON C.id_client = T.id_client )
     
    SELECT *
      FROM maCTE2

    Les CTE du bas peuvent appeler les précédentes. Est-ce que cela rentre dans vos besoins?

    PS : Le code est volontairement simpliste et on aurait pu se passer de la CTE, c'était surtout pour présenter la fonction d'imbrication au cas où vous ne la connaissiez pas

    Cordialement,
    Lyche
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  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 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par olosta Voir le message
    1 - Est ce que c'est normal/courant de passer par des tables temporaires?
    2 - Est ce que c'est conseiller ? déconseiller ?
    3 - Est ce la pire façon de faire ? Est ce du bricolage, bidouillage ?
    4 - Est ce que l'on doit forcément passer uniquement par des requètes pour avoir un programme solide ?
    1 - parfois OUI, mais si vous trouvez une solution aussi bonne, sans c'est mieux.
    2 - plutôt déconseillé car cela doublonne les données en RAM, donc pousse hors du cache d'autres données de production en sus de générer des opérations de disque
    3 - il n'y a pas d'état d'âme à avoir, ni d'intégrisme. Si la solution avec des tables temporaires est la seule qui me donne des temps de réponse bon, alors c'est celle qui faut prendre ! Car tout temps est une consommation de ressources au détriment des autres utilisateurs et qui plus est lors des lectures les tables sont verrouillées pour les écritures.... donc moindre concurrence
    4 - ce serait le mieux... Il arrive que l'on doive se compromettre. Si les mathématiques sont une science, l'informatique n'est qu'une technique, avec toutes ses faiblesses.

    Mais montrez nous vos requêtes... Il y a sans doutes des solutions plus audacieuses qui vous ont échappées.

    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. Réponses: 3
    Dernier message: 25/05/2015, 18h13
  2. Réponses: 3
    Dernier message: 12/05/2015, 14h39
  3. Changer le nom d'une table sur SQL server avec une requete
    Par Oluha dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 01/02/2014, 23h35
  4. [AC-2007] Créer un enregistrement avec des tables liées sur SQL Server
    Par NEfanda dans le forum Access
    Réponses: 2
    Dernier message: 29/04/2010, 19h31
  5. Réponses: 5
    Dernier message: 30/03/2006, 13h38

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