システムにはuser_posts(post)& user_post_like_counts(likesの数)という2つのテーブルがあります。 投稿を並べ替える(asc/desc)関数を実装しました。ORDER BYを最適化して2つの大きなテーブルを結合する
問題は:データテーブルが約200万レコードの場合です。 SQLを実行するには長い時間がかかります(2分)。
SELECT DISTINCT user_posts.*, `user_post_like_counts`.total_count
FROM `user_posts`
LEFT OUTER JOIN `user_post_like_counts` ON `user_post_like_counts`.`user_post_id` = `user_posts`.`id`
WHERE `user_posts`.`deleted_at` IS NULL
AND `user_posts`.`created_at` <= '2017-04-24 01:47:00'
ORDER BY `user_post_like_counts`.total_count DESC
LIMIT 50
OFFSET 0;
私はちょうど実行するために1秒よりかからことにより、上記のSQLを順序を削除場合。
これは、このSQLクエリのEXPLAINです。
https://i.stack.imgur.com/sBK4j.png
私は本当にすべての助けに感謝。 おかげ
MySql <> Sql Server。 –
あなたがページングを使用しているので、あなたはhvによって注文を使用します。私は問題がdistinct.why 2つのテーブル間の関係ならdistinct.wt kindを使用すると思います。 – KumarHarsh
user_post_like_countsテーブルにはどのようなインデックスがあり、それらのフィールドにはどのようなインデックスが含まれていますか? – Shadow