Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête lente MySQL :INNER JOIN + ORDER BY provoque le tri de fichiers

Vous auriez besoin de dénormaliser un peu et de copier le champ posts.created_at dans la table post_tags (je l'ai appelé post_created_at, vous pouvez le nommer comme vous voulez) :

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;

puis ajoutez un index à posts_tags sur

(tag_id, post_created_at)

Cela permettra à la requête d'obtenir tous les messages d'un tag, dans le bon ordre, sans tri de fichiers.