2010-10-21 6 views
0

Je lance des requêtes mysql select 3500 fois dans une boucle for et effectue des opérations sur les valeurs retournées par les requêtes en PHP. ce processus prend 16 secondes à exécuter pour la boucle. toute suggestion pour réduire le temps d'exécution et améliorer les performances. Merci!Comment réduire le temps d'exécution du programme en PHP et comment améliorer les performances

+2

Pourriez-vous poster le code de votre boucle? – andrewmu

+0

Interroger en boucle est presque toujours une mauvaise idée. S'il vous plaît nous montrer votre requête et ce que vous essayez de faire exactement. –

Répondre

2

Refactorisez votre sélection MySQL de sorte que vous ne l'exécutez qu'une fois, pas 3500 fois. Dites-nous les questions en question, et nous serons en mesure de vous aider à le faire

+0

En fait, je lance les requêtes en fonction de la période de temps. par exemple je reçois le nombre de connexions d'utilisateur quotidien depuis 2001. merci pour vos suggestions et donnez quelques suggestions à Refactor MYSQL – KMK

+1

@KMK - nous montrer les requêtes SQL, et nous pourrions être en mesure de refactoriser pour vous - la solution la plus évidente pour un La requête de période de temps est avec un groupe par - mais sans connaître les requêtes, il n'y a pas beaucoup plus que nous pouvons réellement faire pour aider. –

+0

Salut Mark Baker, J'ai besoin de code pour exporter les données de la table de visualisation de Google vers Excel et PDF. S'il vous plaît aidez-moi. J'attendrais votre réponse. Merci – KMK

5

Essayez de minimiser le nombre de requêtes, avez-vous vraiment besoin de 3500 requêtes ou pouvez-vous sélectionner toutes les lignes dans un seul appel? Si ce n'est pas le cas, vous pouvez obtenir des performances en utilisant des instructions préparées PDO vous offre une interface facile à utiliser pour cela.

http://dk2.php.net/manual/en/book.pdo.php

http://dk2.php.net/manual/en/pdo.prepare.php

S'il vous plaît coller du code si je dois être plus précis :)

+0

Bonne solution - PDO préparer le type de précompile l'instruction mais avec des variables dynamiques, donc si vous devez * l'exécuter 3500 fois, ce sera encore beaucoup plus rapide. –

+0

En fait, je cours des requêtes basées sur la période de temps. merci pour votre suggestion. – KMK

0

je fais face au même problème que vous.

La quantité de connexions mysql que vous ouvrez pendant l'opération sera critique. Essayez de les exécuter tous en une seule connexion. Si vous avez besoin de plusieurs connexions, utilisez plutôt mysql_pconnect.

Évitez d'utiliser des commandes que mysql ne peut pas mettre en cache. (par exemple, MAINTENANT()) Pour obtenir une liste de ces commandes, consultez le lien ici: http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html J'y parviens en changeant ma requête de temps réel en heure.

Évitez autant que possible les grandes instructions, essayez de les réduire en plus petites et utilisez du code pour les relier entre elles. Plus la déclaration est petite, plus la mise en cache est facile, ce qui conduit à de meilleures performances. Enfin, si vous avez besoin d'une solution rapide, memcached est une solution très bonne et rapide à implémenter.

La règle générale est la suivante: si vous pouvez exécuter des instructions moins nombreuses et plus simples, c'est mieux.

Questions connexes