2010-05-10 7 views
4

J'ai une sélection et requête comme ci-dessous ...Comment tester la vitesse d'une requête mySQL?

$sql = "SELECT * 
     FROM notifications 
     WHERE to_id='".$userid."' 
      AND (alert_read != '1' OR user_read != '1') 
     ORDER BY alert_time DESC"; 
    $result = mysql_query($sql); 

comment puis-je tester combien de temps la requête a pris à courir?

Répondre

0

voudrez peut-être regarder cette discussion:

How to test MySQL query speed, with less inconsistencies?

+0

J'ai déjà vu ça, mais ça n'a pas vraiment aider. Je suis nouveau dans les tests de vitesse et je ne l'ai pas bien compris. J'ai essayé d'utiliser microtime, mais il a fallu la vitesse de PHP et pas la requête. – Chris

1

Si vous exécutez la requête à partir de la console MySQL, la vitesse sera affichée juste après leur requête est RAN.

+0

Je n'ai même pas pensé à ça, merci! – Chris

+0

Yaa! BAISER. :) –

+0

Oui j'ai considéré une réponse plus complexe, mais honnêtement si vous êtes intéressé par le réglage de base, utilisez simplement la fonctionnalité déjà intégrée dans le client mysql :) – Rob

2

utilisez la fonction php microtime() avant et après mysql_query, puis comparez les résultats.

$time1 = (int) microtime(); 
$result = mysql_query($sql); 
$time2 = (int) microtime(); 

echo ($time2 - $time1); 

(si vous utilisez microtime (true) - qui renvoie le numéro de flotteur, vous obtiendrez moins grand nombre acurate)

+0

vous avez écrit en commentaire à un autre article, que le microtime mesure la vitesse de PHP. Je pense que pour des requêtes simples qui durent moins de 1 milliseconde, cela peut être inutile, mais je ne vois pas non plus de raison de mesurer des requêtes rapides comme celle-ci. Je pense que pour les requêtes plus lentes que 1miliseconde (et les requêtes problématiques sont plus lentes que cela) c'est assez précis. Seulement si vous exécutez le serveur DB sur la machine distante, que ce ne serait pas aussi précis. – marianboda

9

Il existe une variable système MySQL profiling qui est créé dans la base de données INFORMATION_SCHEMA pour votre session particulière . Voir le code ci-dessous:

mysql> set profiling=1; 

Il suffit simplement d'exécuter la requête ... session d'exécution de la requête sera stockée dans la INFORMATION_SCHEMA.

mysql> select count(*) from client where broker_id=2; 

Une fois que la requête est terminée, il suffit d'exécuter cette ligne:

mysql> show profiles; 

qui montre tout le temps d'exécution des requêtes. Juste vous exécutez et dites l'ID de requête comme ci-dessous pour obtenir l'exécution/vitesse de votre requête.

mysql> show profile for query 1;

Questions connexes