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

Langage SQL Discussion :

Optimiser grâce aux tables temporaires


Sujet :

Langage SQL

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut Optimiser grâce aux tables temporaires
    Bonjour,

    lorsque je suis amené à réaliser de grosses requêtes (de 10 à 20 tables
    en jointure) je préfère les réaliser petit à petit en utilisant des tables
    temporaires. Pensez-vous que cette technique permet d'optimiser
    l'exécution ?

    Merci et bonne journée.

  2. #2
    Membre éclairé Avatar de srvremi
    Homme Profil pro
    Directeur d'école d'ingénieurs
    Inscrit en
    Mars 2002
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur d'école d'ingénieurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2002
    Messages : 554
    Points : 656
    Points
    656
    Par défaut
    Pour avoir fait ce genre de manipulations sur un serveur MS SQL, je pense que oui.

    Dans mon cas, les tables à traiter contenaient environ 2 millions de lignes sur une centaine de colonnes. J'ai effectué des requêtes avec de grosses jointures, et j'utilisais ça dans des procédures stockées. L'exécution de mon application SQL prenait environ 2h30 chaque jour.
    En utilisant des tables temporaires, je suis passé à 1h30. Je n'ai rien changé à la structure des requêtes à proprement parlé, j'ai juste converti certaines jointures en tables temporaires.

    Après je ne sais pas si c'est valable pour tout le monde dans tous les cas.

    @+
    Rémi

  3. #3
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    salut;
    ayant moi aussi utilisé cette méthode avec MS SQL-Server je peux te dire que celà m'a beaaucoup aidée!!!
    j'évitais les sous-requêtes lourdes et pénibles.... et je gagnais beaucoup de temps et le résultat était garanti!
    j'affichais le résultat à l'aide d'un code php (c'était surtout pour générer des statistiques bien précises) et tout allait super bien
    ++
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Merci à tous pour ces précisions.

    @+

  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 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Faire ce genre de chose est totalement farfelu et permet à coup sûr de se planter !

    1) l'opimisation sera plus poussée si la requête est complexe

    2) faire des tables temporaires, à moins que ce ne soit dans une transaction, ne garantie pas la cohérence des données. A coup sûr cela peut entrainer des références fantômes ou des lecture non répétitibles.
    A lire pour comprendre : http://sqlpro.developpez.com/cours/s...chniques/#L1.4
    donc un jeu de données résultant probablement pourri pas les delete, insert et update commis entre les différentes requêtes.

    3) si vous réalisez votre ensemble de requête avec tables temporaires dans une transaction, alors la durée des opérations de l'ensemble sera au moins la même qu'en une seule requête, mais vraisemblablement plus longue...

    En conclusion n'utilisez surtout pas de table temporaire intermédiaires. Ces solutions dangereuses car incohérentes, viennent en général de personnes qui ne maitrisent pas les problématique de SGBD relationnelles et n'ont pour seule références que MySQL, et sont incapable de travailler avec des jointures et des sous requêtes complexes par manque de culture.

    Au pire, faites des vues intermédiares. Dans ce cas la cohérence est garantie. Avec SQL Server 2005, vous pourrez utiliser les CTE pour réaliser des requêtes intermédiaires dans une seule et même requête.
    Mais dans tous les cas, s'il existe une requête SELECT même très complexe, qui évite les vues ou les CTE, elle sera mieux optimisée et donc plus rapide.



    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. Table temporaire
    Par Tapioca dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/07/2004, 11h32
  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