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

Mysql langsom forespørgsel:INNER JOIN + ORDER BY forårsager filesort

Du bliver nødt til at denormalisere en smule og kopiere posts.created_at-feltet ind i post_tags-tabellen (jeg kaldte det post_created_at, du kan navngive det, som du vil):

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;

og tilføj derefter et indeks til posts_tags på

(tag_id, post_created_at)

Det vil gøre det muligt for forespørgslen at hente alle indlæg for et tag i den korrekte rækkefølge uden filsortering.



  1. Opdatering af allerede afkrydsede afkrydsningsfelter i PHP

  2. Revisionslogning for PostgreSQL

  3. rake db:create throws databasen eksisterer ikke fejl med postgresql

  4. pip3 installation af mysql-python mislykkedes med fejlkode 1 i /tmp/pip-install-4nev4id4/mysql-python/