Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta lenta do MySQL:INNER JOIN + ORDER BY causa filesort


Você precisaria desnormalizar um pouco e copiar o campo posts.created_at na tabela post_tags (eu o chamei de post_created_at, você pode nomear como quiser):
CREATE TABLE `posts_tags` (
  `id` int(11) NOT NULL auto_increment,
  `post_id` int(11) default NULL,
  `tag_id` int(11) default NULL,
  `post_created_at` datetime default NULL,
  `created_at` datetime default NULL,
  `updated_at` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `index_posts_tags_on_post_id_and_tag_id` (`post_id`,`tag_id`)
) ENGINE=InnoDB;

e, em seguida, adicione um índice a posts_tags em
(tag_id, post_created_at)

Isso permitirá que a consulta obtenha todos os posts de uma tag, na ordem correta, sem filesort.