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

Requêtes MySQL Discussion :

create temporary table, memoire ou disque?


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut create temporary table, memoire ou disque?
    Amis du jour bonjour,

    Si pour un besoin particulier j'éxécute la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TEMPORARY TABLE games as select .......
    Cette temporay table est-elle écrite en disque ou bien en mémoire?

    Merci.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Si la mémoire est suffisante, elle sera créée en mémoire. Sinon, ça va swapper sur le disque, comme n'importe quel programme.

    Un serveur de données doit être généreusement dimensionné en mémoire pour être efficace. Tout dépend du volume à traiter bien sûr.
    Plus d'info dans cet article de SQLPro.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    Merci pour la pertinence de la réponse.

    Je peux donc me permettre de créer des tables temporaires (qui plus est dans mon cas ne sont pas volumineuses, c'est plutot pour casser une requête qui écrit sur disque, mais avec une temporary table je ne passe plus d'écriture en disque).

  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 865
    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 865
    Points : 53 018
    Points
    53 018
    Billets dans le blog
    6
    Par défaut
    Je ne sais pas si c'est vrai avec MySQL mais en principe une table temporaire est TOUJOURS écrite sur le disque car c'est avant tout une transaction.
    C'est pourquoi il est conseillé de les éviter !

    A +

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    Vous me mettez le doute maintenant !

    Je me demande comment MySQL traite une TEMPORARY TABLE créée par l'utilisateur?

    CREATE puis DROP? Si oui la table est-elle considérée comme une table normale (donc écrite dans un fichier), sauf qu'elle est dropée à la fin automatiquement?

    que pensez vous de ces conseil? (diapo 90)

    http://www.com.univ-mrs.fr/ssc/info/...ours_mysql.pdf

    Je cite également ce site (pas tout) : http://www.mesdiscussions.net/blog_section_14.html

    "Il pourrait être donc judicieux, si vous vous trouvez dans ce cas, de créer une temporary table (en memoire) contenant votre liste et de faire une jointure sur cette liste, plutôt que d'utiliser un IN (...) avec énormement de valeurs. "

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 865
    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 865
    Points : 53 018
    Points
    53 018
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par ionesco Voir le message
    Je me demande comment MySQL traite une TEMPORARY TABLE créée par l'utilisateur?
    Pour MySQL in fine je ne sais pas. Mais comme les opération INSERT, UPDATE et DELETE sont des transactions implicite, cela oblige à journaliser toutes les lignes manipulées, c'est à dire les écrire dans le journal de transaction, ce qui provoque immanquablement des opérations de disque.

    Citation Envoyé par ionesco Voir le message
    CREATE puis DROP? Si oui la table est-elle considérée comme une table normale (donc écrite dans un fichier), sauf qu'elle est dropée à la fin automatiquement?
    Oui !

    Citation Envoyé par ionesco Voir le message
    que pensez vous de ces conseil? (diapo 90)

    http://www.com.univ-mrs.fr/ssc/info/...ours_mysql.pdf

    Je cite également ce site (pas tout) : http://www.mesdiscussions.net/blog_section_14.html

    "Il pourrait être donc judicieux, si vous vous trouvez dans ce cas, de créer une temporary table (en memoire) contenant votre liste et de faire une jointure sur cette liste, plutôt que d'utiliser un IN (...) avec énormement de valeurs. "
    Sans plus d'informations, cela me parait douteux !!!!

    Lisez l'article que j'ai écrit sur les tables temporaires (c'est pour SQL Server, mais je fais le pari que MySQL ne diffère pas de ses concurrents sur le sujet.) La plupart des gens pensent naïvement que des tables temporaires sont en mémoire. Sérieusement une table est faite pour pouvoir mettre des millions de lignes, c'est à dire des Go de données.... Croyez vous que la mémoire le puisse ?
    http://blog.developpez.com/sqlpro/p6...t-persistance/

    C'est pourquoi il est très préférable d'utiliser des vues ou mieux des CTE car dans ce cas c'est le serveur lui même qui décidera, s'il n'a pas assez de mémoire, de créer ou non une table de travail. Mais il est vrai que la gestion des vues MySQL n'est pas terrible et que les CTE ne sont pas implémentées...

    A +

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Points : 117
    Points
    117
    Par défaut
    Il me semble que pour les tables temporaires de petit volume, ca se passe bien, mais que pour des table temporaires qui dépasse un certain seuil, alors ca devient catastrophique.... Peut être que c'est le seuil entre l'écriture mémoire et l'écriture disque??

    Je ne trouve aucune documentation MySQL officielle sur le sujet, mais je m'empresse de lire votre article qui va m'aider à y avoir plus clair pour les SGBD en général (car on ne vit pas qu'avec MySQL .... )

  8. #8
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 863
    Points
    1 863
    Par défaut
    Vu que l'on peut choisir le type de table temporaire (InnoDB, Myisam), je dirais que ca dépend de ça... si c'est une table HEAP, ca sera en mémoire, si non sur le disque.

Discussions similaires

  1. Pb avec CREATE TEMPORARY TABLE
    Par anémone dans le forum Débuter
    Réponses: 8
    Dernier message: 17/11/2010, 17h49
  2. Create temporary table avec KEY
    Par olibara dans le forum Langage SQL
    Réponses: 16
    Dernier message: 10/02/2009, 11h08
  3. create temporary table : unicité des sessions
    Par firejocker dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/12/2007, 11h20
  4. Query avec un CREATE TEMPORARY TABLE = erreur ?
    Par d3mone dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/05/2007, 19h11
  5. create temporary table
    Par ghostlord79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/02/2004, 16h57

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