10 votes

Une requête simple est lente dans Laravel, mais incroyablement rapide dans la console de base de données

J'ai un problème très étrange, que je n'arrive pas à cerner. J'utilise Laravel pour mon application backend, où j'exécute une requête très simple sur une table avec 30k enregistrements, tous avec des index appropriés. Voici la requête :

DB::select('select * from Orders where ClientId = ?', [$id])

Depuis l'application Laravel, cette requête s'exécute pendant 1,2 secondes (la même chose se produit si j'utilise le modèle Eloquent) :

    "query" => "select * from Orders where ClientId = ?"
    "bindings" => array:1 [
      0 => "44087"
    ]
    "time" => 1015.2

Le problème est que si je lance la même requête dans la console de la base de données ou dans PHPMyAdmin, la requête prend environ 20 millisecondes.

Je ne comprends pas comment cela est possible puisque j'utilise la même base de données, la même requête, le même ordinateur et la même connexion à la base de données.

Quelle peut en être la raison ?

0voto

Creative87 Points 115

La requête doit avoir la même vitesse dans phpmyadmin ou sinon, quelle que soit l'application, essayez d'utiliser l'instruction explain pour voir plus de détails sur la requête.

La cause de ce conflit peut être due à de nombreuses raisons autres que MySQL, comme par exemple

Le script php script a lui-même quelques fonctions qui ralentissent le chargement. Essayez de vérifier le fichier error.log du serveur, il y a peut-être des erreurs dans les fonctions.

En fait, phpmyadmin pourrait avoir une fonction de connexion à MySQL différente de celle de larval. Essayez de vérifier l'extension utilisée dans la connexion, elle n'est peut-être pas compatible avec la version de php que vous utilisez et je pense que c'est la cause de la lenteur des requêtes.

J'ai remarqué que dans certaines applications que j'ai faites, la cause était toujours dans les fonctions php ou dans la connexion, par exemple mysql_connect était beaucoup plus rapide que PDO exten sur php < 5.6 comme je l'ai expérimenté, mais la cause était toujours dans les fonctions php dans le script.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X