Je me suis retrouvé dans une situation difficile. J'ai une table utilisée pour la page hit suivi avec près de 105 millions de lignes Il ressemble à ceci. (!):MySQL: table d'indexation avec 100+ millions de rangées
CREATE TABLE `media_hits` (
`id` int(10) unsigned NOT NULL auto_increment,
`media_code` char(7) NOT NULL,
`day` date NOT NULL,
`hits` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `media_code` (`media_code`,`day`)
) ENGINE=InnoDB;
Comme vous pouvez imaginer courir tout type de requête sur cette table prend beaucoup de temps. Une requête type serait la suivante:
SELECT DISTINCT(`media_code`), COUNT(*) AS c
FROM `media_hits`
WHERE `day` >= DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY(`media_code`)
ORDER BY c DESC
LIMIT 200;
Cette requête prend une éternité. Et EXPLAIN sur la requête me donne ceci:
id: 1
select_type: SIMPLE
table: media_hits
type: index
possible_keys: NULL
key: media_code
key_len: 10
ref: NULL
rows: 104773158
Extra: Using where; Using index; Using temporary; Using filesort
C'est tout simplement horrible. Donc ma question est: Que puis-je faire à ce sujet? Essayer d'ajouter des index appropriés maintenant est impossible. La requête ALTER TABLE prendrait probablement plus d'une semaine pour s'exécuter. J'ai essayé de supprimer des lignes de plus de 6 mois, mais 24 heures plus tard, cette requête était toujours en cours d'exécution.
J'ai besoin de résoudre ce problème. La seule chose qui me vient à l'esprit est de créer une nouvelle table avec des index appropriés et de commencer à enregistrer les hits dans cette table. En arrière-plan, je pourrais avoir un script insérant lentement des enregistrements de l'ancienne table media_hits. Quelqu'un peut-il offrir des suggestions sur la façon d'indexer cette table, et éventuellement quelques indications sur les colonnes que je devrais indexer?
Je suis d'accord qu'un nouveau système est nécessaire, et les tableaux agrégés aideraient énormément. Je suppose que le vrai problème est d'importer les anciennes données d'une manière qui ne prend pas des semaines. haha Si c'est ce qu'il faut, alors c'est ce qu'il faut, mais ce serait bien s'il y avait une approche plus simple. – mellowsoon