如何通过order by,group by和join来提高查询性能

时间:2017-09-06 08:11:26

标签: mysql sql performance sql-order-by inner-join

当连接具有数百万个数据的多个表时,我遇到了订单问题。但是我得到了解决方案而不是加入EXISTS的独特使用将改善以下问题的性能

How to improve order by performance with joins in mysql

SELECT
   `tracked_twitter` . *,
   COUNT( * ) AS twitterContentCount,
   retweet_count + favourite_count + reply_count AS engagement 
FROM
   `tracked_twitter` 
   INNER JOIN
      `twitter_content` 
      ON `tracked_twitter`.`id` = `twitter_content`.`tracked_twitter_id` 
   INNER JOIN
      `tracker_twitter_content` 
      ON `twitter_content`.`id` = `tracker_twitter_content`.`twitter_content_id` 
WHERE
   `tracker_twitter_content`.`tracker_id` = '88'
GROUP BY
   `tracked_twitter`.`id` 
ORDER BY
   twitterContentCount DESC LIMIT 20 OFFSET 0

但是如果我只需要父表中的结果集,那么该方法就可以解决了。如果,我想在父表之外执行分组计数和其他数学函数,该怎么办?我编写了一个解决我的标准的查询,但执行时需要20秒。我怎样才能优化它?

提前致谢

1 个答案:

答案 0 :(得分:2)

鉴于查询已经相当简单,我要查看的选项是......

  • 执行计划(查找可以添加的任何缺失索引)
  • 缓存(以确保SQL已经拥有ram中的所有数据)
  • 反规范化(将查询转为平面选择)
  • 在应用程序中缓存数据(因此您可以在其上使用PLINQ之类的东西)
  • 使用基于ram的商店(redis,elastic)
  • 文件组调整(将数据库物理移动到更快的光盘)
  • 对表格进行分区(将原始数据分散到多个物理光盘上)

您在此列表中越深入,解决方案就会越多。 我想这取决于您需要多快的查询以及您需要多少解决方案才能扩展。