sql >> Base de Datos >  >> RDS >> Mysql

Consulta lenta de Mysql:INNER JOIN + ORDER BY provoca filesort

Tendrías que desnormalizar un poco y copiar el campo posts.created_at en la tabla post_tags (lo llamé post_created_at, podrías nombrarlo como quieras):

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;

y luego agregue un índice a posts_tags en

(tag_id, post_created_at)

Eso permitirá que la consulta obtenga todas las publicaciones para una etiqueta, en el orden correcto, sin clasificación de archivos.