01-03-2007, 04:25 PM
Voilà, une faois les tests effectués, il s'avère que les deux premières solutions sont quasi-équivalentes (généralement, la seconde est plus rapide de 2 à 5 centièmes de seconde pour 10.000 occurences). En revanche, l'utilisation de deux requête est généralement deux fois plus lente.
Voici le code utilisé pour ce test:
Voici le code utilisé pour ce test:
Code PHP :
<?php
include('sql.php');
$debut=microtime(true);
for($i=1; $i<=10000; $i++)
{
$retour=mysql_query("SELECT COUNT(id_joueur) AS nbre FROM joueurs_carac WHERE id_joueur NOT IN(SELECT id_joueur FROM marche WHERE id_equipe=1) AND id_equipe=1") or die(mysql_error());
$data=mysql_fetch_assoc($retour);
}
$fin=microtime(true);
$solution1=$fin-$debut;
echo 'solution1='.$solution1.'<br />';
$debut=microtime(true);
for($i=1; $i<=10000; $i++)
{
$retour=mysql_query("SELECT COUNT(id_joueur) AS nbre FROM joueurs_carac LEFT JOIN marche USING(id_joueur) WHERE marche.id_joueur IS NULL AND joueurs_carac.id_equipe=1") or die(mysql_error());
$data=mysql_fetch_assoc($retour);
}
$fin=microtime(true);
$solution2=$fin-$debut;
echo 'solution2='.$solution2.'<br />';
$debut=microtime(true);
for($i=1; $i<=10000; $i++)
{
$retour=mysql_query("SELECT COUNT(id_joueur) AS nbre FROM joueurs_carac WHERE id_equipe=1") or die(mysql_error());
$data=mysql_fetch_assoc($retour);
$retour=mysql_query("SELECT COUNT(id_joueur) As nbre FROM marche WHERE id_equipe=1") or die(mysql_error());
$data1=mysql_fetch_assoc($retour);
$nbre=$data['nbre']-$data1['nbre'];
}
$fin=microtime(true);
$solution3=$fin-$debut;
echo 'solution3='.$solution3;
mysql_close();
A noter que la table "joueurs_carac" comporte 10640 entrées dont 19 correspondent à la clause WHERE et la table "marche en comporte 2, les deux répondant à la clause WHERE.
Merci pour toutes vos précisions.
Amicalement,