我有一个MySQL表,用于存储具有> 2MM行和8列以及userID上的索引的用户统计信息。当用户访问他的个人资料时,会从数据库中检索出大量信息,最糟糕的情况是,几十个SELECT
查询有时会与其他表格一起加入。它与SO上的配置文件类似,它也需要大量的数据。大表上的MySQL性能问题 - 如何有效地缓存结果?
一些想要获得用户分数的查询需要COUNT
和其他性能,吃掉MySQL函数。所以只需查看配置文件页面可能需要10-20秒。
现在我的问题:
- 如何像这样一个网站,拉这么多的信息,迅速?
- 我需要一个缓存层吗?
- 我是否应该预先计算出消耗MySQL性能的分数等的计数值 ?
- 我应该使用一个 写入优化表和一个读取优化表吗?如果是这样,我可以如何检索SO上的实时数据?
- 我应该离开MySQL吗?
这是一个很好的答案。总结一下,我应该减少查询的数量,并在需要时提取信息 - 因此基于事件。然而,问题是在像名人堂这样的一些页面上,我需要很多关于很多用户的信息。所以我不能轻易减少查询次数。那么下一步应该是什么? – Horen 2012-07-17 22:06:44
对于有很多业务规则的密集查询,最好是定期离线计算这些视图,并将它们物化(临时表),并将它们用作快速访问数据。 缓存听起来很棒,实际上很容易实现,直到解决缓存失效的问题。数据背后的业务规则越多,执行失效就越困难。所以数据的周期性实现更容易实现。 – 2012-07-18 12:47:33
所以你的意思是我应该创建临时表,只包含例如计算用户得分,因为计算需要大部分时间,临时表上的“select”会非常快,对吗? 有一个缺点,数据不会生活,只是不时计算 - 哪种吸引... – Horen 2012-07-18 16:22:57