sql >> Database >  >> RDS >> Mysql

Mysql trage zoekopdracht:INNER JOIN + ORDER BY veroorzaakt filesort

Je zou een beetje moeten denormaliseren en het veld posts.created_at naar de tabel post_tags kopiëren (ik noemde het post_created_at, je zou het kunnen noemen zoals je wilt):

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;

en voeg vervolgens een index toe aan posts_tags op

(tag_id, post_created_at)

Hierdoor kan de zoekopdracht alle berichten voor een tag krijgen, in de juiste volgorde, zonder filesort.



  1. Hoe voer je dagelijks automatisch een php-script uit?

  2. TNS-12505:TNS:luisteraar kent momenteel geen SID die is opgegeven in de verbindingsdescriptor

  3. Waarom is het resultaat van `select 'a'=0;` 1?

  4. Hoe controleer ik of een tabel of kolom in een database bestaat?