En cherchant à optimiser une requête SQL, j’ai cherché un script PHP qui permet de comparer le temps d’exécution d’une requête SQL en générale afin de la comparer à plusieurs autres.
Ces scripts peuvent vous servir, j’ai trouvé le premier sur un forum, et je l’ai adapté pour en faire une fonction.
Pour connaitre le temps d’exécution d’une requete SQL (extrait de ce forum)
$query_time = 0;
$query_count = 0;
//Run a query
$t0 = microtime(true);
$sql = « SELECT fields FROM table WHERE condition »;
//execute query
$query_time += microtime(true)-$t0;
$query_count++;
//Report
$query_time = round($query_time*1000, 3);
echo « <p>SQL: $query_time seconds | $query_count SQL Queries</p> »;
Pour comparer le temps d’exécution de 2 requêtes SQL (benchmark SQL query)
La fonction
function benchmark_2_query($query1,$query2){
$query1_time = 0; $query1_count = 0;
$query2_time = 0; $query2_count = 0;
$t0 = microtime(true);
$query1_time += microtime(true)-$t0; $query1_count++;
$query2_time += microtime(true)-$t0; $query2_count++;
//Report
$query1_time = round($query1_time*5000, 3);
$query2_time = round($query2_time*5000, 3);
echo « <p>SQL: $query1_time seconds | $query1_count SQL Queries</p> »;
echo « <p>SQL: $query2_time seconds | $query2_count SQL Queries</p> »;
echo « <p> Faster query : « ;
if($query1_time<$query2_time){ echo ‘QUERY 1’;} else { echo ‘QUERY 2’;}
echo « </p »;
}
La comparaison entre 2 requêtes
par exemple, pour le cas de 2 requêtes exécutées sur la table “user” a un 10 champs, dont id_host.
QUERY 1 : $sql1 = « SELECT * FROM user « ;
QUERY 2 : $sql2 = « SELECT id_user FROM user « ;
benchmark_2_query($sql1,$sql2);
Le résultat
SQL: 0.025 seconds | 1 SQL Queries
SQL: 0.056 seconds | 1 SQL Queries
Faster query : QUERY 1