2009-07-23 6 views
2

J'ai une base de données MySQL extrêmement volumineuse (environ 1 million d'éléments) et j'exécute une requête assez complexe sur cette base de données. Cela prend environ 2 secondes quand j'entre la commande SQL dans phpMyAdmin mais cela prend environ 1-2 minutes pour générer la même sortie en utilisant le code PHP.La commande de base de données s'exécute glacialement dans mon script PHP, rapidement dans phpMyAdmin

Pourquoi y aurait-il une telle différence de temps? Si c'était une requête mal exécutée, cela ne prendrait-il pas beaucoup de temps pour que les résultats apparaissent également dans phpMyAdmin?

+0

Vous devriez probablement poster votre requête, ou quelque chose de spécifique. Il est très difficile de diagnostiquer avec rien à travailler avec. Si je devais deviner, je dirais que vous pourriez courir dans la mise en cache des requêtes (c'est-à-dire que vous l'avez exécuté en PHP d'abord, puis dans phpMyAdmin et qu'il était déjà mis en cache). Cela dépend totalement de la façon dont vous rencontrez ce problème. Pouvez-vous fournir plus de détails? – zombat

Répondre

3

Il est très possible que le script PHP fasse quelque chose en plus d'exécuter simplement la requête (par exemple en mélangeant d'énormes quantités de données). Pourriez-vous nous montrer le code PHP qui exécute votre SQL?

Notez que si vous n'avez pas mise en mémoire tampon de sortie sur, et la sortie de la pièce de données par pièce au client, qui va vous ralentir beaucoup car il envoie tant de petits morceaux au client, au lieu d'un gros morceau. Jetez un oeil à output buffering in PHP.

Dans sa forme la plus simple:

ob_start(); 
// Output lots of data here. 
ob_end_flush(); 

phpMyAdmin est optimisé pour gérer de grandes quantités de données. Jetez un oeil à son code interne pour voir comment il récupère les données d'une requête, cela pourrait être utile.

Aussi, je suppose que vous avez phpMyAdmin sur le même serveur que votre script? Etes-vous sûr que vous obtenez exactement la même sortie?

+0

Merci beaucoup. Mon application est plus rapide maintenant. Encore plus de reconnaissance car votre snip était utilisable ... laissé seul avec les instructions PHP, je ne l'aurais jamais essayé! – Smandoli

6

Si vous avez des tonnes de données dans votre base de données, combien de lignes retourne votre requête? Lorsque vous lancez une requête avec phpMyAdmin, la pagination est automatiquement ajoutée.

Ainsi, avec cette requête initiale:

select * 
from test 

phpMyAdmin exécute en fait celui-ci:

select * 
from test 
limit 0, 30 

Si vous ne disposez pas de cette limite dans votre requête (lors de son exécution à partir de votre script PHP), il pourrait expliquer la différence: aller chercher 30 lignes et aller chercher des centaines/milliers/plus de lignes ne prend pas le même laps de temps (même chose pour les rendre).

Si vous utilisez une limite dans votre requête et/ou n'essayez pas d'obtenir beaucoup de lignes, pouvez-vous poster votre code?

(Une autre raison possibile serait cache de requête: première fois que la requête est exécutée, il faut beaucoup de temps, les temps à venir, MySQL a gardé les résultats dans le cache)

Questions connexes