Nombre de requête SQL pour un script de visite
8 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Nombre de requête SQL pour un script de visite
Pour un script de compteur de visite, ) votre avis quel est le nombre moyen maximal de requetes qu'on devrait utiliser?
J'imagine (peut-être à tort) que cela dépend de la taille des bases, du nombre de lignes... mais en ce qui me concerne, je ne récupère généralement qu'un seul champ (indexé) et une seule ligne sur chaque table.
La plus grosse table concerne les visites, mais là je ne fais qu'une insertion (table indexée sur l'id auto-incrémenté, donc cela ne doit pas être trop lent).
Cette table est intensivement utilisée lorsque j'admire mes statistiques détaillées
L'autre "grosse" table (enfin, pour moi!), c'est la table qui conserve les user agents et l'os/navigateur correspondants.
Je faisais cela afin d'éviter de recalculer à chaque fois l'os, le browser, la version... De cette manière, en un select, j'obtenais l'id de l'os et du browser correspondant.
Question 1 :
Finalement, je me demande si c'est si intelligent que ça.
Ne sachant pas trop ce qui bouffe le plus de ressources, le nombre de lignes ou la taille de la base.
Et je n'ai aucune idée du nombre de users agents existants (robots compris), à part beaucoup (mais vu que certains n'existent plus, cela doit limiter un peu)
Question 2 :
Je fais "souvent" ce genre de trucs :
req1 : SELECT id FROM table WHERE toto='bidule'
si j'obtiens un resultat nb, je fais "UPDATE hits=hits+1 FROM table WHERE id=nb"
sinon je fais un INSERT INTO table SET hits=1,toto='bidule'.
Le problème est que statistiquement, le cas où je dois faire un UPDATE est évidemment le plus fréquent.
si je fais :
$result=mysql_query(UPDATE hits=hits+1 WHERE toto='bidule')
if ($result===FALSE) mysql_query(INSERT ... )
est-ce possible?
Evidemment, si la table ne contient pas toto='bidule', cela prendra plus de temps, mais vu que les insertions sont statistiquement beaucoup plus rares, cela fait gagner une requete.
Voila pour le moment
Merci!
J'imagine (peut-être à tort) que cela dépend de la taille des bases, du nombre de lignes... mais en ce qui me concerne, je ne récupère généralement qu'un seul champ (indexé) et une seule ligne sur chaque table.
La plus grosse table concerne les visites, mais là je ne fais qu'une insertion (table indexée sur l'id auto-incrémenté, donc cela ne doit pas être trop lent).
Cette table est intensivement utilisée lorsque j'admire mes statistiques détaillées
L'autre "grosse" table (enfin, pour moi!), c'est la table qui conserve les user agents et l'os/navigateur correspondants.
Je faisais cela afin d'éviter de recalculer à chaque fois l'os, le browser, la version... De cette manière, en un select, j'obtenais l'id de l'os et du browser correspondant.
Question 1 :
Finalement, je me demande si c'est si intelligent que ça.
Ne sachant pas trop ce qui bouffe le plus de ressources, le nombre de lignes ou la taille de la base.
Et je n'ai aucune idée du nombre de users agents existants (robots compris), à part beaucoup (mais vu que certains n'existent plus, cela doit limiter un peu)
Question 2 :
Je fais "souvent" ce genre de trucs :
req1 : SELECT id FROM table WHERE toto='bidule'
si j'obtiens un resultat nb, je fais "UPDATE hits=hits+1 FROM table WHERE id=nb"
sinon je fais un INSERT INTO table SET hits=1,toto='bidule'.
Le problème est que statistiquement, le cas où je dois faire un UPDATE est évidemment le plus fréquent.
si je fais :
$result=mysql_query(UPDATE hits=hits+1 WHERE toto='bidule')
if ($result===FALSE) mysql_query(INSERT ... )
est-ce possible?
Evidemment, si la table ne contient pas toto='bidule', cela prendra plus de temps, mais vu que les insertions sont statistiquement beaucoup plus rares, cela fait gagner une requete.
Voila pour le moment
Merci!
Re: Nombre de requête SQL pour un script de visite
xTrade a écrit:si je fais :
$result=mysql_query(UPDATE hits=hits+1 WHERE toto='bidule')
if ($result===FALSE) mysql_query(INSERT ... )
est-ce possible?
Je viens de voir ça
INSERT INTO table (hits,toto) VALUES (1,'bidume') ON DUPLICATE KEY UPDATE hits=hits+1;
Cela semble correspondre à ce que je cherche, mais est-ce plus rapide?
Merci!
Re: Nombre de requête SQL pour un script de visite
xTrade a écrit:Je viens de voir ça
INSERT INTO table (hits,toto) VALUES (1,'bidume') ON DUPLICATE KEY UPDATE hits=hits+1;
Cela semble correspondre à ce que je cherche, mais est-ce plus rapide?
Merci!
C'est forcément plus rapide ! Mais alors de combien je sais pas....
Perso j'utilise cette syntaxe de temps en temps (il faut MySql 5 mini attention)
Sinon pour la rapidité de tes requètes, le plus important est d'avoir choisi tes index de manière judicieuse.
Après, tu peux aussi imaginer chronometrer leur temps d'execusion pour chaque script pour te donner une petite idée...
Re: Nombre de requête SQL pour un script de visite
easyzik a écrit:Perso j'utilise cette syntaxe de temps en temps (il faut MySql 5 mini attention)
Ah?
Bon ben je vais utiliser ma première solution, j'ai déjà gagner 8 requêtes dans le cas le plus pénalisant (visiteur provenant d'un moteur)
Sinon pour la rapidité de tes requètes, le plus important est d'avoir choisi tes index de manière judicieuse.
Après, tu peux aussi imaginer chronometrer leur temps d'execusion pour chaque script pour te donner une petite idée...
Oui, je viens de vérifier : sur mes grosses tables, c'est le cas.
J'ai également vérifier que je n'importais que les champs utiles.
Sinon, est-ce que le nombre lui-même de requetes est important : autrement dit, est-ce que cela vaut le coup de se faire ch... à dimininuer ce nombre?
Actuellement, je fais (14+nbr de mots) requètes dans le cas d'un nouveau visiteur qui vient par un moteur de recherche (cas le plus défavorable) et 7 pour un visiteur qui parcourt mon site.
En utilisant des cookies, je peux virer deux requètes.
Cela vous parait correct? (les SELECT apporte au maximum 3 champs, généralement des nombres car je croise pas mal de table pour éviter de tout surcharger. Sinon ce sont des UPDATE)
Merci
Ce n'est pas le nombre de requète qui est important mais la quantité de ressources qu'elles demandent.
Les requètes de selection uniquement basées sur des clé primaires sont extrêmement rapides.
Les update sont déja beaucoup plus lents.
Enfin, utiliser un ORDER BY, un GROUP BY ou tout autre truc du genre sur un SELECT peux ruiner les perfs...
Globallement, il vaut mieux essayer de reduire au maximum le nombre de requetes quand même. L'utilisation d'un système de cache sur les pages principale (index etc...) est souvent une solution qui marche bien quand c'est possible...
Tu peux aussi utiliser des tables en memoire (HEAP) qui sont plus rapides d'accès que les autres mais volatiles...
A toi de voir et de combiner tout ça.
Un bon moyen de tester tes requètes et aussi de te documenter sur le mot clé EXPLAIN.
C'est surtout por vérifier que tes clés sont correctement choisies
Amuse toi bien
Les requètes de selection uniquement basées sur des clé primaires sont extrêmement rapides.
Les update sont déja beaucoup plus lents.
Enfin, utiliser un ORDER BY, un GROUP BY ou tout autre truc du genre sur un SELECT peux ruiner les perfs...
Globallement, il vaut mieux essayer de reduire au maximum le nombre de requetes quand même. L'utilisation d'un système de cache sur les pages principale (index etc...) est souvent une solution qui marche bien quand c'est possible...
Tu peux aussi utiliser des tables en memoire (HEAP) qui sont plus rapides d'accès que les autres mais volatiles...
A toi de voir et de combiner tout ça.
Un bon moyen de tester tes requètes et aussi de te documenter sur le mot clé EXPLAIN.
C'est surtout por vérifier que tes clés sont correctement choisies
Amuse toi bien
En clair, mysql est tout un art
Pour un début, je suis assez content de moi
Petites précisions :
- ON DUPLICATE KEY fonctionne sous mysql 4.1
- En utilisant cette commande, mysql_last_id retourne toujours l'id de la ligne insérée OU modifiée, contrairement à un UPDATE tout seul qui renvoie 0 ou 1 (je crois) -> dans ma recherche à la diminution du nombre de requètes, je vais en gagner quelques unes
En réfléchissant, je pense que tu as raison sur la rapidité : pour faire un update, en interne, il doit bien y avoir l'équivalent d'un SELECT tout comme pour un INSERT sur une clé unique donc cela doit avoir la même vitesse sinon mieux vu qu'on fait une requete en moins.
Pour un début, je suis assez content de moi
Petites précisions :
- ON DUPLICATE KEY fonctionne sous mysql 4.1
- En utilisant cette commande, mysql_last_id retourne toujours l'id de la ligne insérée OU modifiée, contrairement à un UPDATE tout seul qui renvoie 0 ou 1 (je crois) -> dans ma recherche à la diminution du nombre de requètes, je vais en gagner quelques unes
En réfléchissant, je pense que tu as raison sur la rapidité : pour faire un update, en interne, il doit bien y avoir l'équivalent d'un SELECT tout comme pour un INSERT sur une clé unique donc cela doit avoir la même vitesse sinon mieux vu qu'on fait une requete en moins.
8 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006
- Configurer des nouveaux moteurs dans Google Analytics
- Les albums web Picasa passent à 1 Go de stockage
- WebRankInfo
- Photos satellite des incendies en Grèce dans Google Earth
- Ajouter un Gadget Google sur son site
- Googlebot, le robot d'indexation de Google
- Google Desktop pour Mac OS X
- Nombre de requete sql
- pagerank et nombre de visite
- requête sql help!!
- [sql] Requête
- pb de requête sql
- Requête SQL
- Requete SQL spécial :s
- Requete SQL spécifique
- Requete SQL contenu
- Optimiser requete sql
- Problème de requête SQL
- erreur de requete sql
- Requete SQL compliquée
- Erreur requete SQL
- Requête SQL débutant
Consultez la description détaillée des produits ou services de Google suivants : Googlebot
- Analyse des backlinks
Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités




le forum