sql >> データベース >  >> RDS >> Mysql

Mysqlの遅いクエリ:INNER JOIN +ORDERBYによりファイルソートが発生します

    少し非正規化して、posts.created_atフィールドをpost_tagsテーブルにコピーする必要があります(私はこれをpost_created_atと呼び、好きなように名前を付けることができます):

    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;
    

    次に、

    のposts_tagsにインデックスを追加します
    (tag_id, post_created_at)
    

    これにより、クエリはファイルソートなしで、タグのすべての投稿を正しい順序で取得できるようになります。



    1. ライブマテリアライズドビューでMySQLとPostgresに参加する方法

    2. Herokuで列タイプを変更するにはどうすればよいですか?

    3. Webアプリケーション用のファイルストレージ:ファイルシステムvs DBvsNoSQLエンジン

    4. MySQL Workbenchの列フラグはどういう意味ですか?