+/- rapide en php et mysql
10 messages
• Page 1 sur 1
-

chamagne - WRInaute discret

- Messages: 159
- Inscription: 23 Fév 2004
+/- rapide en php et mysql
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";
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

- Messages: 8579
- Inscription: 23 Nov 2005
Re: +/- rapide en php et mysql
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

- Messages: 4173
- Inscription: 27 Déc 2004
Re: +/- rapide en php et mysql
Tout est dit..Sql est un langage très puissant, qu'on utilise bien en deça de ses capacités souvent.
- Robinson
- WRInaute passionné

- Messages: 2233
- Inscription: 25 Oct 2005
Re: +/- rapide en php et mysql
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.
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

- Messages: 159
- Inscription: 23 Fév 2004
Re: +/- rapide en php et mysql
Bonjour
Je vous ai entendu et adopté le count de la manière suivante :
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é ?
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é

- Messages: 1765
- Inscription: 31 Aoû 2007
Re: +/- rapide en php et mysql
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:
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

- Messages: 56
- Inscription: 22 Oct 2010
Re: +/- rapide en php et mysql
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
-

chamagne - WRInaute discret

- Messages: 159
- Inscription: 23 Fév 2004
Re: +/- rapide en php et mysql
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
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é

- Messages: 1765
- Inscription: 31 Aoû 2007
Re: +/- rapide en php et mysql
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;
}
10 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Importation rapide de CSV dans MYSQL
- [PHP-MySQL] : argument is not a valid MySQL ressource
- [php] Fonction plus rapide ?
- Alternative plus rapide à un switch php
- [PHP/MySQL] Excepter une valeur dans un requête SQL en PHP
- PHP MySQL : du php dans un champ de ma BD
- [PHP/SQL] Quel est le plus rapide pour compter les rangées ?
- Compatibilité PHP 4.4.2 -> PHP 5.1.6 et MySQL 3.23 ->
- PHP 4 - Mysql 4.x VS PHP 5 - Mysql 5
- MYSQL/PHP
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Google Chrome : nouvelle version beta plus rapide - 18-03-2009
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- Les différents systèmes de mise en cache des données - 16-08-2010
- Description des liens sponsorisés Google AdWords - 19-09-2002
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
