+/- rapide en php et mysql


chamagne
WRInaute discret
WRInaute discret
 
Messages: 159
Inscription: 23 Fév 2004

+/- rapide en php et mysql

Message le Mer Jan 12, 2011 17:27

Bonsoir
Ma question n'est pas essentielle, mais laquelle de ces 3 formes est la plus efficace en terme d'accès BD et rapidité ?

1.
commande globale :
echo mysql_num_rows(mysql_query("SELECT ...))." liens dans ".mysql_num_rows(mysql_query("SELECT ...))." catégories et ".mysql_num_rows(mysql_query("SELECT ...))." sous-catégories";

2.
ou avec utilisation de variables :
$1=mysql_num_rows(mysql_query("SELECT ...));
$2=mysql_num_rows(mysql_query("SELECT ...));
$3=mysql_num_rows(mysql_query("SELECT ...));
echo $1." liens dans ".$2." catégories et ".$3." sous-catégories";

3.
ou avec utilisation de variables et décomposition commandes mysql :
$1=mysql_query("SELECT ...);
$1=mysql_num_rows($1);
$2=mysql_query("SELECT ...);
$2=mysql_num_rows($2);
$3=mysql_query("SELECT ...);
$3=mysql_num_rows($3);
echo $1." liens dans ".$2." catégories et ".$3." sous-catégories";


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8579
Inscription: 23 Nov 2005

Re: +/- rapide en php et mysql

Message le Mer Jan 12, 2011 17:33

Ni l'une ou l'autre de ces méthodes. SI l'objectif est juste de faire un cout, pourquoi ne pas utiliser l'opérateur sql COUNT plutôt ?


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 4173
Inscription: 27 Déc 2004

Re: +/- rapide en php et mysql

Message le Jeu Jan 13, 2011 8:12

Tout est dit..Sql est un langage très puissant, qu'on utilise bien en deça de ses capacités souvent.


chamagne
WRInaute discret
WRInaute discret
 
Messages: 159
Inscription: 23 Fév 2004

Re: +/- rapide en php et mysql

Message le Ven Jan 14, 2011 16:18

OK merci à tous les 2
Je pensais qu'utiliser plus de variables était plus gourmand en ressources même si de façon minime
à bientôt pour d'autres interrogations !

Robinson
WRInaute passionné
WRInaute passionné
 
Messages: 2233
Inscription: 25 Oct 2005

Re: +/- rapide en php et mysql

Message le Mar Jan 18, 2011 9:30

C'est pas 6 variables à la place de 3 qui vont te bouffer du temps et de la conso serveur ^^

Par contre, ne pas utiliser COUNT, ça te coûtera de 5 à 50 fois plus de temps et ressources serveur.

C'est toujours la même chose, on cherche à économiser sur des broutilles alors qu'on réalise de monumentales erreurs à côté ^^ (ne t'inquiète pas, ça arrive à tout le monde)

Perso, le nombre de variables, je m'en cogne complètement, s'il faut en utiliser pour un développement plus clair, je ne vais pas me gêner, et c'est pas les minimes économies générées qui peuvent rivaliser avec ce qu'elles apportent.


chamagne
WRInaute discret
WRInaute discret
 
Messages: 159
Inscription: 23 Fév 2004

Re: +/- rapide en php et mysql

Message le Mer Jan 19, 2011 11:52

Bonjour
Je vous ai entendu et adopté le count de la manière suivante :
Code: Tout sélectionner
$liens = mysql_fetch_array(mysql_query("SELECT COUNT(compteur) FROM sites WHERE valid=1",$db));
$categories = mysql_fetch_array(mysql_query("SELECT COUNT(compteur) FROM cat WHERE bigcat=1",$db));
$souscategories = mysql_fetch_array(mysql_query("SELECT COUNT(compteur) FROM cat WHERE bigcat=0",$db));
echo "<b>Cet annuaire contient ";
echo $liens[0]." liens in ".$categories[0]." catégories and ".$souscategories[0]." sous-catégories";

Ce qui donne : Cet annuaire contient 9794 liens dans 153 catégories et 826 sous-catégories
L'élève a-t-il bien travaillé ?


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: +/- rapide en php et mysql

Message le Mer Jan 19, 2011 22:40

Tu peux économiser un peu de RAM en utilisant mysql_fetch_rows plutôt que le array (qui retourne "clé" + "index") ça fait 3 variables en moins à utiliser (bon là c'est minime).

Bon, par contre ta solution est bien si tu fais des "count" sur peu d'enregistrement.
Lorsque ton site grossira tu devras utiliser une autre méthode.
Je te suggère d'utiliser une table "stat" avec 3 colonnes (sites, cat_1, cat_0).
Quand tu fais tes INSERT tu UPDATE cette table avec + 1.
Après ça te fait un simple SELECT * FROM stat;
Là tu vas gagner énormément ;)
Pour mettre à jour cette table en une seule étape:
Code: Tout sélectionner
UPDATE stat SET sites = (SELECT COUNT(compteur) FROM sites WHERE valid=1);


enzoci
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: 22 Oct 2010

Re: +/- rapide en php et mysql

Message le Jeu Jan 20, 2011 4:19

Bonjour, comme je ne vois pas le contenu de tes tables, je vais te donner une idée qui serait à tester. Cependant, selon moi tout devrait être possible. Si tu es à l'aise avec les requêtes MySQL, il serait probablement possible de faire 3 sous requêtes dans ta requête. Par exemple
Code: Tout sélectionner
SELECT id, (SELECT COUNT(id) FROM table) AS total1,  (SELECT COUNT(id) FROM table2) AS total2,  (SELECT COUNT(id) FROM table3) AS total3 FROM table LIMIT 1
. Selon moi avec quelques tests, peut-être que cela est possible...


chamagne
WRInaute discret
WRInaute discret
 
Messages: 159
Inscription: 23 Fév 2004

Re: +/- rapide en php et mysql

Message le Jeu Jan 20, 2011 5:52

Bonjour
>>> Julia41
Je retiens l'idée d'une table "compteur" (en fait j'en utilise déjà 1 pour compter les visites par site).
Mais ne l'utiliserai pas.
C'est moi, principalement, qui remplit la BD et utilise tantôt un formulaire, tantôt entrée directe dans phpmyadmin, de même pour l'admin, d'où des risques d'oubli.

>>> enzoci
A l'aise, non, me débrouille et fais souvent des recherches d'exemple
Sous-requêtes : oui, possible, mais garde ma solution pour plus de clarté

Ma BD ne dépassera jamais quelques milliers d'enregistrements et je pinaille pour peu de choses sinon apprendre, j'ai encore quelques num_rows à changer en count et là, sans faire de test précis, mais à vue de nez, ça semble faire gagner un peu de temps.

Merci à tous


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: +/- rapide en php et mysql

Message le Ven Jan 21, 2011 7:19

C'est moi, principalement, qui remplit la BD et utilise tantôt un formulaire, tantôt entrée directe dans phpmyadmin, de même pour l'admin, d'où des risques d'oubli.

Par le script d'admin tu peux ajouter à la main.
Par contre, ce que tu peux faire en "mieux" serait un simple script .php que tu éxecutes par cron (si tu le peux, sinon à la main) faisant les calculs:
Code: Tout sélectionner
UPDATE stats SET sites = (SELECT COUNT(..)), cat = (SELECT ...);

Voilà la fonction que j'utilise pour faire ce que tu fais :
Code: Tout sélectionner
function get_row_count($table, $suffix = ''){
   global $DB;
   if ($suffix) {
      $suffix = ' ' . $suffix;
   }
   $DB->query('SELECT COUNT(*) FROM ' . $table . $suffix);
   list($a) = $DB->next_record();
   $DB->close();
   return $a;
}


Là la même avec du memcache :
Code: Tout sélectionner
function uniq_count_row($table, $suffix = '', $key, $ttl = '') {
   global $Cache, $DB;
   if (isset($suffix)) {
      $suffix = ' ' . $suffix;
   }
   if (!isset($ttl)) {
      $ttl = 120;
   }
   if ($Cache->get_value($key) === false) {
      $DB->query('SELECT COUNT(*) FROM ' . $table . $suffix);
      list($a) = $DB->next_record();
      $DB->close();
      $Cache->cache_value($key, $a, $ttl);
   }
   $a = $Cache->get_value($key);
   return $a;
}


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités