Bonjour,
Sur mon site j'ai un petit système de statistiques de fréquentation en plus de Google Analytics.
Ça marche avec une table visites qui compte les visites (IP) avec quelques autres informations :
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE TABLE visites (
ip varchar(30) NOT NULL,
date date NOT NULL,
timestamp_start int(10) unsigned NOT NULL DEFAULT '0',
timestamp_end int(10) unsigned NOT NULL,
host text NOT NULL,
referer_visite text NOT NULL,
cpt_vues smallint(5) unsigned NOT NULL,
is_archived tinyint(4) NOT NULL,
KEY (ip)
) ENGINE=MyISAM;
-- et non PRIMARY KEY (ip) |
Le tout est découpé PAR JOUR.
Ca veut dire que si une même IP vient le 20 mars et le 21 mars, il y aura 2 entrées dans la table : une pour le 20 mars et une autre pour le 21.
Mon objectif est d'optimiser le temps d'éxécution de ces requêtes (parce qu'elles sont appelées à chaque page vue) :
Détection nouvelles visites
SELECT ip FROM visites WHERE date = CURDATE() AND ip='127.0.0.1'
Mise à jour à chaque page vue
1 2 3
| UPDATE visites
SET cpt_vues = cpt_vues + 1, timestamp_end = 1299956232
WHERE ip = '127.0.0.1' AND date = CURDATE() |
Donc je me demande quel index utiliser.
Actuellement j'ai un index PRIMARY sur le champ ip, et je me demande si ça ne serait pas mieux d'avoir à la place un index PRIMARY sur 2 colonnes : ip et date.
Est-ce que ça serait plus rapide ?
Autre point : l'espace disque, est ce qu'un index sur 2 colonnes prend significativement plus de place d'un index sur 1 colonne ?
Merci
Partager