sql >> Databasteknik >  >> RDS >> Mysql

Mysql långsam fråga:INNER JOIN + ORDER BY orsakar filsortering

Du skulle behöva avnormalisera lite och kopiera posts.created_at-fältet till post_tags-tabellen (jag kallade det post_created_at, du kan namnge det hur du vill):

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;

och lägg sedan till ett index till posts_tags på

(tag_id, post_created_at)

Det gör att frågan kan få alla inlägg för en tagg, i rätt ordning, utan filsortering.



  1. Hur sorterar man efter tidigare datum i databasen?

  2. Använd en fackförening eller en gå med - vad är snabbare

  3. Mysql-kommandot hittades inte i OS X 10.7

  4. mysql lagrad procedur, fråga för att kontrollera om det finns eller inte