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 :

[SGBD] [PHP/MySql] Supprimer une table SQL temp dans une session PHP


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 294
    Points : 868
    Points
    868
    Par défaut [SGBD] [PHP/MySql] Supprimer une table SQL temp dans une session PHP
    J'aide un collègue pour améliorer les performances d'un serveur LAMP.
    Un des gros pb est la lenteur du à de multi select sur une table de 100 MB.
    Le site est multi utilisateur, et chacun a des informations ds cette table.
    La solution qui me semble la + efficace est de créer une table temporaire correspondant à l'ID du user lors du login et que tous les SELECT se fassent sur cette table temporaire au lieu de la table principale.
    Afin d'éviter un complexe algo de syncrhro, l idee est de faire les SELECT que sur la table temporaire, et tous les INSERT/ALTER/UPDATE en // sur la table temp et la table principale.
    J'ai fait qques essais sur les SELECT only: c'est en effet 100 fois + rapide!
    Le site est en PHP. Et le login utilise les sessions PHP.
    La question est de savoir comment au mieux supprimer (DROP) ma table temporaire?
    Lors d'un fonctionnement normal, clairement au niveau du log out. Mais quid si la session est perdue?
    Cela me semble peu adapté à une variable de sessions, surtout ci celles ci sont écrites sur le HDD: l interet de la table temp est aussi que tout se fasse en RAM plutot que des SELECT sur une table sur le HDD.
    Je ne connais pas bien le systeme des sessions PHP. Comment une session peut etre perdue?
    Si il s'agit d'un timeout, j'ai pensé faire mon DROP juste avant celui ci (cad par exemple à la 29ème min si le timeout est de 30min).
    A quels cas dois je aussi penser?
    Que pensez vous de ma solution?

    J'ai pensé aussi à améliorer le modele de la DB, mais seulement en 2nd recourt. J'aimerais autant que possible éviter d'y toucher (dangeureux pour l integrité des donées, dépendances, relations, etc)
    D'ailleurs, j'ai fait qques essais rapide de l'une et l'autre solution. Le gain de performance le plus significatif est avec les table temp.
    Evidement, le top serait de combiner les 2.

    La question que je me pose surtout est de savoir si mon concept tient vraiment la route.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    euh sinon vous avez déjà mis des index & cie... ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 294
    Points : 868
    Points
    868
    Par défaut
    C'est vrai que j'aurais du commencer par là.
    Je viens de mettre un index sur le champ userID de la table principale, et cela change tout!
    Que fait cet index au juste?

    Peut on imaginer que mysql fasse avec de lui meme des optimisations similaires à ce que je décris ici (table temp sur l index) ?

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    pour simplifier avec un index, il a créé une table intermédiaire bien plus petite qui permettra d'accélérer les requêtes ultérieures... enfin si l'index est bien pensé.

    Peut on imaginer que mysql fasse avec de lui meme des optimisations similaires à ce que je décris ici (table temp sur l index) ?
    a ma connaissance, mysql ne sait rien faire... mais est très à la mode.

    perso, je pense que beaucoup de gens devraient mieux penser à la phase de conception des tables... cela peut changer énormement de choses sur les performances finales en prod

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Comment lier une partie d'une Table Sql Server avec une table Access
    Par mirage3000 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/09/2011, 03h59
  2. Réponses: 1
    Dernier message: 01/05/2011, 20h36
  3. Réponses: 9
    Dernier message: 26/11/2008, 10h18
  4. Exécuter une instuction SQL stockée dans une table
    Par Zouzou1er dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 19/11/2008, 21h16
  5. Réponses: 1
    Dernier message: 12/04/2007, 17h08

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