Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Langsame MySQL-Abfrage:INNER JOIN + ORDER BY verursacht Dateisortierung

Sie müssten ein wenig denormalisieren und das Feld posts.created_at in die Tabelle post_tags kopieren (ich habe es post_created_at genannt, Sie können es benennen, wie Sie möchten):

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;

und fügen Sie dann einen Index zu posts_tags auf

hinzu
(tag_id, post_created_at)

Dadurch kann die Abfrage alle Posts für ein Tag in der richtigen Reihenfolge ohne Dateisortierung abrufen.