Optimisation sql

WRInaute passionné
Supposons que je crée une table contenant tous les os de mes visiteurs, table utilisée à chaque visite.

Si je réordonne régulièrement cette table, avec l'os le plus fréquent en 1er et le moins fréquent en dernier, est-ce que cela a une influence sur la vitesse de recherche (vu que la valeur la plus fréquente est en 1ère position) ?
 
WRInaute passionné
L'ordre d'affichage et l'ordre de stockage n'ont rien a voir.
Pour trier il faut des index. Si tu as un index sur l'os, la recherche ira plus vite. Et l'insertion sera plus lente.
 
WRInaute passionné
xTrade a dit:
Ok.

Et si je mets l'os en clé primaire, c'est utile?

Ca dépend de ce que tu mets dans ta table :)
Si tu veux faire une table dans laquelle tu mémorise juste le nombre de visite par os, avec comme champ "os" et "quantite" par exemple, oui, il _faut_ mettre os comme clé primaire. La clé primaire c'est ce qui identifi de manière unique une ligne de la table, donc dans ce cas c'est "os" qui est l'identifiant.
 
WRInaute passionné
arnaudmn a dit:
Ca dépend de ce que tu mets dans ta table :)
Si tu veux faire une table dans laquelle tu mémorise juste le nombre de visite par os, avec comme champ "os" et "quantite" par exemple, oui, il _faut_ mettre os comme clé primaire. La clé primaire c'est ce qui identifi de manière unique une ligne de la table, donc dans ce cas c'est "os" qui est l'identifiant.

En fait, ce que je veux mettre dans la table, c'est la correspondance entre "user agent" et os+browser, sans à avoir à tout rechercher (comme le fait le script sur lequel je me base)

En gros, dès que je récupère le "user agent", je veux regarder le plus rapidement possible dans la table s'il existe, puis récupérer l'id de l'os et du browser (et l'ajouter dans le cas où l'agent n'était pas présent)

Donc dans ce cas là, vaut-il mieux index+clé primaire (si c'est possible) ou bien clé primaire sur l'agent?
 
WRInaute discret
salut

Je dirais même plus, une clé primaire, c'est un INDEX (comme les autres) qui a une contrainte UNIQUE, c'est à dire qu'il ne pourra pas y avoir 2 lignes contenant 'windows' dans ta table. Après c'est à toi de voir si tu stockes 1 ligne par visiteur, ou une ligne par OS .... mais dans tous les cas, il te faut indexer cette colonne.

fab
 
WRInaute passionné
Merci pour vos réponses.

Et donc une nouvelle question :wink:

J'ai besoin d'additionner, pour toutes les valeurs de la table, une colonne 'hits'.

Est-ce plus rapide d'utiliser "SELECT SUM(hits) FROM table" ou bien un "SELECT hits FROM table" puis d'additionner avec une boucle?

Je pencherais pour la 1ère solution, mais comme je découvre mysql...
 
WRInaute passionné
xTrade a dit:
Est-ce plus rapide d'utiliser "SELECT SUM(hits) FROM table" ou bien un "SELECT hits FROM table" puis d'additionner avec une boucle?

La première est plus rapide. Ca evite au moteur de gérer un pointeur et de faire une copie du résultat de la requete en mémoire.
 
WRInaute passionné
Toujours dans ma découverte de Mysql, j'ai une nouvelle question :wink:

J'ai vu sur un forum qu'il conseillaient d'utiliser LIMIT 0,1 lorsqu'on était sur que la recherche ne donnait qu'un résultat.

Si je fais ma recherche sur une clé primaire, est-ce utile?

Merci!
 
WRInaute passionné
LIMIT 0,1 c'est pour forcer le moteur a ne pas chercher plus de 1 enregistrement. Si tu fais une requete sur une clé primaire, donc unique, ça ne sert à rien.
Pour ma part je l'ai jamais utilisé quand je sais que j'ai au plus un résultat.
 
Discussions similaires
Haut