|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
xTrade WRInaute accro

Inscrit le: 11 Déc 2006 Messages: 2022
|
Posté le : Lun Fév 12, 2007 18:55 Sujet du message: Optimisation sql |
|
|
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) ? |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1420
|
Posté le : Lun Fév 12, 2007 18:57 Sujet du message: Optimisation sql |
|
|
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. |
|
| |
|
 |
xTrade WRInaute accro

Inscrit le: 11 Déc 2006 Messages: 2022
|
Posté le : Lun Fév 12, 2007 19:00 Sujet du message: Optimisation sql |
|
|
Ok.
Et si je mets l'os en clé primaire, c'est utile? |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1420
|
Posté le : Lun Fév 12, 2007 19:05 Sujet du message: Optimisation sql |
|
|
| xTrade a écrit: |
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. |
|
| |
|
 |
xTrade WRInaute accro

Inscrit le: 11 Déc 2006 Messages: 2022
|
Posté le : Lun Fév 12, 2007 19:15 Sujet du message: Optimisation sql |
|
|
| arnaudmn a écrit: |
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? |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1420
|
Posté le : Lun Fév 12, 2007 19:19 Sujet du message: Optimisation sql |
|
|
| xTrade a écrit: |
Donc dans ce cas là, vaut-il mieux index+clé primaire (si c'est possible) ou bien clé primaire sur l'agent? |
Une clé primaire est obligatoirement indexée  |
|
| |
|
 |
xTrade WRInaute accro

Inscrit le: 11 Déc 2006 Messages: 2022
|
Posté le : Lun Fév 12, 2007 19:24 Sujet du message: Optimisation sql |
|
|
| arnaudmn a écrit: |
| xTrade a écrit: |
Donc dans ce cas là, vaut-il mieux index+clé primaire (si c'est possible) ou bien clé primaire sur l'agent? |
Une clé primaire est obligatoirement indexée  |
Ah! Ok, merci!
J'en apprends tous les jours! |
|
| |
|
 |
fablezouave WRInaute occasionnel

Inscrit le: 20 Déc 2006 Messages: 109 Localisation: Montreuil, 93
|
Posté le : Lun Fév 12, 2007 19:47 Sujet du message: Optimisation sql |
|
|
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 |
|
| |
|
 |
xTrade WRInaute accro

Inscrit le: 11 Déc 2006 Messages: 2022
|
Posté le : Mar Fév 13, 2007 1:04 Sujet du message: Optimisation sql |
|
|
Merci pour vos réponses.
Et donc une nouvelle question
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... |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1420
|
Posté le : Mar Fév 13, 2007 14:29 Sujet du message: Optimisation sql |
|
|
| xTrade a écrit: |
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. |
|
| |
|
 |
xTrade WRInaute accro

Inscrit le: 11 Déc 2006 Messages: 2022
|
Posté le : Jeu Fév 15, 2007 21:15 Sujet du message: Optimisation sql |
|
|
Toujours dans ma découverte de Mysql, j'ai une nouvelle question
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! |
|
| |
|
 |
arnaudmn WRInaute accro

Inscrit le: 11 Mai 2005 Messages: 1420
|
Posté le : Jeu Fév 15, 2007 21:31 Sujet du message: Optimisation sql |
|
|
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. |
|
| |
|
 |
| |
|
|