Cette requête prend plus d'une minute pour terminer:MySQL REJOIGNEZ réduction du temps
SELECT keyword, count(*) as 'Number of Occurences'
FROM movie_keyword
JOIN
keyword
ON keyword.`id` = movie_keyword.`keyword_id`
GROUP BY keyword
ORDER BY count(*) DESC
LIMIT 5
Chaque mot-clé a un ID associé (colonne keyword_id). Et cet ID est utilisé pour rechercher le mot clé réel à partir du tableau de mots clés.
movie_keyword a 2,8 millions de lignes
mot-clé a 127000
Cependant, pour revenir prend juste est le plus utilisé keyword_id seulement 1 seconde:
SELECT keyword_id, count(*)
FROM movie_keyword
GROUP BY keyword_id
ORDER BY count(*) DESC
LIMIT 5
est-il un moyen plus efficace de le faire?
sortie avec EXPLIQUEZ:
1 SIMPLE keyword ALL PRIMARY NULL NULL NULL 125405 Using temporary; Using filesort
1 SIMPLE movie_keyword ref idx_keywordid idx_keywordid 4 imdb.keyword.id 28 Using index
Structure:
CREATE TABLE `movie_keyword` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`movie_id` int(11) NOT NULL,
`keyword_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_mid` (`movie_id`),
KEY `idx_keywordid` (`keyword_id`),
KEY `keyword_ix` (`keyword_id`),
CONSTRAINT `movie_keyword_keyword_id_exists` FOREIGN KEY (`keyword_id`) REFERENCES `keyword` (`id`),
CONSTRAINT `movie_keyword_movie_id_exists` FOREIGN KEY (`movie_id`) REFERENCES `title` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4256379 DEFAULT CHARSET=latin1;
CREATE TABLE `keyword` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`keyword` text NOT NULL,
`phonetic_code` varchar(5) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_keyword` (`keyword`(5)),
KEY `idx_pcode` (`phonetic_code`),
KEY `keyword_ix` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=127044 DEFAULT CHARSET=latin1;
Pouvez-vous poster les résultats de votre requête d'origine avec le mot-clé 'EXPLAIN' devant le SELECT. Et montrant les index de la table aiderait également –
Cette DB a été générée en utilisant un outil python IMDB (je n'avais aucune implémentation de conception) – Patrick
Merci pour l'EXPLAIN - il est probable que vous avez besoin d'ajouter des index pour le rendre plus rapide - l'explication donne l'info –