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

PHP & Base de données Discussion :

Performances : php/mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut Performances : php/mysql
    Bonjour,

    Je travaille sur un serveur avec des capacités très limitées et j'aimerais vraiment tenter d'optimiser tous mes scripts.
    Quasiment toutes mes tables sont indexé par email (primary key).

    Donc voilà j'ai tout plein de questions !
    • Pour commencer, mettons qu'on me donne un fichier csv à importer dans une table, vaut il mieux utiliser "LOAD DATA INFILE ... " ou, fopen + fgets + mysql_query(..explode..) ?
    • Actuellement : Lorsque en entrée on me donne un TUPLE à placer dans une TABLE, je vérifie en PHP , si il existe dans la table alors je génère une requête (en PHP) UPDATE ne contenant que les champs diffèrent entre les deux , sinon je l'insère avec des conditions sur certains champs( vérifié en PHP).
      Vaut il mieux faire tout cela en MYSQL ?
    • Est ce que un SELECT x FROM t1 WHERE x IN (SELECT x from t2 WHERE x > 2) est est plus rapide qu'une jointure ?

    Et j'ai déjà oublié mes autres questions

    Enfin voilà merci d'avance pour vos réponses !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Citation Envoyé par ithurts Voir le message
    [*]Pour commencer, mettons qu'on me donne un fichier csv à importer dans une table, vaut il mieux utiliser "LOAD DATA INFILE ... " ou, fopen + fgets + mysql_query(..explode..) ?
    Sans hésitation LOAD DATA INFILE

    Pour le reste j'aurai tendance à dire que tout dépend !! ça t'avance, je sais.

    Jointure, pas jointure, traitement côté PHP ou SQL ... bien souvent il peut y avoir des surprises. Chaque cas est unique, et dépend souvent d'un tas de paramètres qu'il n'est pas toujours évident d'appréhender.
    Des tests sont souvent utiles et nécessaires. EXPLAIN peut t'aider à déterminer comment le moteur MySQL gère la requête en question.

    Côté PHP, l'utilisation de requêtes préparées peut apporter (PDO), côté MySQL le plus important à mon sens est d'avoir une base bien structurée, tu peux également mettre en place un système de cache.

    Bref, il y a tout un paquet de conditions qui entrent en compte et beaucoup se gère au cas par cas, pas simple de répondre à ça.

    Une tiote lecture :
    http://dev.mysql.com/doc/refman/5.0/...imization.html

    Cordialement,


    Kohntark-

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut
    Merci pour votre réponse !

    Tout d'abord une petite question à propos de LOAD DATA INFILE.
    Peut on conditionner l'insertion de chaque ligne ?
    Plus précisément.
    Mettons que je veuille mettre à jour une table avec un fichier .csv
    Je veux que certains tuples ne soit jamais changé , d'autre changé seulement si une condition est verifié sur une colonne etc etc .. Est ce possible avec LOAD DATA ? j'ai beau lire et relire les exemples de la doc et trouvé sur le net je ne trouve rien.

    Mes bases sont assez structurées (enfin je crois), par contre je viens de me rendre compte que j'ai recodé des fonctionnalités de la librairie PDO.
    ()

    Je suis en train de lire le guide que vous m'avez linké !

    Merci encore !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 69
    Par défaut
    Hello,

    Pour ton Load data, je ne pense pas que le conditionnement existe pour ton besoin. Tu va devoir le coder en PHP même si tu perdra en performance.

    Actuellement : Lorsque en entrée on me donne un TUPLE à placer dans une TABLE, je vérifie en PHP , si il existe dans la table alors je génère une requête (en PHP) UPDATE ne contenant que les champs diffèrent entre les deux , sinon je l'insère avec des conditions sur certains champs( vérifié en PHP).
    Vaut il mieux faire tout cela en MYSQL ?
    Pour plus de simplicité, j'utiliserais un UPDATE ON DUPLICATE KEY mais tou dépend du contexte dans lequel tu es. on ne sais pas si le nouveau tuple a une clé primaire !!

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par ithurts Voir le message
    [*]Actuellement : Lorsque en entrée on me donne un TUPLE à placer dans une TABLE, je vérifie en PHP , si il existe dans la table alors je génère une requête (en PHP) UPDATE ne contenant que les champs diffèrent entre les deux , sinon je l'insère avec des conditions sur certains champs( vérifié en PHP).
    Vaut il mieux faire tout cela en MYSQL ?
    Il faudrait tester le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ... ON DUPLICATE KEY UPDATE ...
    qui peut se révéler plus rapide puisque que tu évite plusieurs aller/retour vers la bdd
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [AJAX] Performance AJAX, MYSQL, PHP
    Par QAYS dans le forum AJAX
    Réponses: 0
    Dernier message: 05/12/2014, 21h38
  2. Réponses: 1
    Dernier message: 28/03/2014, 14h15
  3. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  4. Grosse base de données Mysql et performances PHP
    Par Dev@lone dans le forum Optimisations
    Réponses: 17
    Dernier message: 17/09/2011, 14h22
  5. [php / mysql] pb if ( mysql_query() )
    Par dkmatt dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/01/2004, 20h07

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