8
votes

Quelle est la coût d'une opération de connexion à une base de données MySQL?

Dans certaines fonctions du code, PHP exécutera des centaines ou dans certains cas, des milliers de requêtes sur les mêmes tables à l'aide d'une boucle. Actuellement, il crée une nouvelle connexion de base de données pour chaque requête. Combien coûte cette opération? Serais-je une augmentation significative de la vitesse en réutilisant la même connexion? Cela pourrait prendre un peu de refactoring pour changer ce comportement et utiliser la même base de données.

Le PHP utilise mysql_connect pour se connecter à la base de données.

juste basé sur ce que j'ai dit ici, existe-t-il d'autres optimisations évidentes que vous recommanderiez (j'ai lu sur les tables de verrouillage par exemple ...)?

EDIT: Ma question concerne davantage l'avantage d'utiliser une seule connexion, et non comment éviter d'utiliser plus d'un.


2 commentaires

Qu'est-ce qui s'est passé quand tu l'as testé?


Il y a une bonne documentation à: dba.stackexchange.com/questions/16969/...


3 Réponses :


2
votes

J'utilise zend_framework et mon profilage de base de données indique que la connexion elle-même prend presque 10 fois plus longtemps que la plupart de mes questions. J'ai deux bases de données différentes que je me connecte et ne se connecte qu'une seule fois à chacune de chaque demande.

Je dirais que la reconnexion de chaque requête est une design médiocre, mais la question du refactoring est plus complexe que cela. Questions à poser:

  1. Y a-t-il des problèmes de performance actuels?
  2. Avez-vous fait le profil du code pour affiner où les problèmes de performance se produisent?
  3. Combien de temps sera requis pour ce refactoring? Prenez en compte les tests impliqués, pas seulement le temps de codage.

3 commentaires

Il y a des problèmes de performance actuels. Je n'ai pas terminé le profilage de code. Je ne sais pas combien de temps refactoring serait, car je ne suis pas à 100% familier avec la base de code.


Son comme ceci est un bon candidat pour refactoring! Pour réitérer cependant, le profilage du code devrait être un facteur de premier plan dans la priorité au refactoring.


J'ai eu un vote sur celui-ci. J'aurais été gentil si l'électeur avait laissé un commentaire sur pourquoi.



0
votes

La réponse à la question initiale devrait être évidente. Si ce n'est pas évident pour vous, il devrait encore être évident de savoir comment savoir à quel point il a un impact.

Y a-t-il d'autres optimisations évidentes

Non - car vous n'avez pas fourni de détails sur la structure de la table ni les requêtes que vous utilisez.


0 commentaires

5
votes

La documentation de mysql_connect états:

Si un deuxième appel est effectué sur MySQL_Connect () avec les mêmes arguments, aucun nouveau lien ne sera établi, mais à la place, l'identifiant de lien du lien déjà ouvert sera renvoyé.

Ainsi, sauf si vous vous connectez avec différentes informations d'identification, changez que la partie de votre code n'affectera pas les performances.


2 commentaires

À moins d'appeler mysql_close () après chaque requête.


Je n'avais pas compris que mysql_connect ne crée pas plusieurs connexions. Merci