J'ai une grande table avec les votes des utilisateurs. J'ai essayé presque tous les tutoriels et essais sur l'utilisation d'INDEX et après avoir échoué ... toutes les combinaisons possibles de champs en tant que clés, mais la requête reste lente.Index pour la requête MySQL lente
Y a-t-il un index que je peux utiliser pour accélérer cela?
(je vous épargne mes tentatives hidious à indizes jusqu'à présent ...)
CREATE TABLE IF NOT EXISTS `votes` (
`uid` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`objectId` bigint(15) NOT NULL,
`vote` tinyint(1) NOT NULL,
`created` datetime NOT NULL,
UNIQUE KEY `unique input` (`uid`,`objectId`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Le tableau a environ 1,3 million de lignes et continuera de croître. C'est la requête que j'essaie:
EXPLAIN SELECT objectId, COUNT(uid) AS voteCount, AVG(vote) AS rating
FROM votes
GROUP BY objectId
Des pointeurs?
Votre droite, j'ai oublié l'objectId dans mon exemple SQL ... fixe – ToBe
Etes-vous sûr que l'Optimizer sera réellement plus rapide avec ces deux sous-requêtes au lieu d'un groupe par? – ToBe
@ToBe. . . Non, j'ai dit que ça valait le coup d'essayer. Cela peut être utile dans certains cas, mais je ne sais pas si cela fonctionnera mieux dans votre cas. Je préfère l'approche explicite «group by», mais il faut parfois essayer de tromper le moteur. –