Mysql
 sql >> Database >  >> RDS >> Mysql

Query lenta di Mysql:INNER JOIN + ORDER BY causa filesort

Dovresti denormalizzare un po' e copiare il campo posts.created_at nella tabella post_tags (l'ho chiamato post_created_at, potresti chiamarlo come vuoi):

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 poi aggiungi un indice a posts_tags su

(tag_id, post_created_at)

Ciò consentirà alla query di ottenere tutti i post per un tag, nell'ordine corretto, senza filesort.