大表上的MySQL性能问题 - 如何有效地缓存结果?

时间:2012-07-17 21:24:46

标签: mysql database performance database-design

我有一个MySQL表来存储用户统计信息,其中包含> 2MM行和8列以及userID上的索引。当用户访问他的个人资料时,从数据库中检索到很多这些信息,导致 - 最坏的情况 - 几十个SELECT查询有时会与其他表联系在一起。它类似于SO上的配置文件,它也必须提取大量数据。

一些想要获得用户分数的查询需要COUNT以及其他使用MySQL功能的性能。因此,只需查询配置文件页面最多可能需要10-20秒。

现在我的问题:

  1. 像SO这样的网站如何快速提取这么多信息?
  2. 我需要缓存层吗?
  3. 我应该预先计算一下 消耗MySQL性能的分数等?
  4. 我应该使用一个 写优化表和一个阅读优化表?如果是这样的话 我可以像SO一样检索实时数据吗?
  5. 我应该离开MySQL吗?

1 个答案:

答案 0 :(得分:2)

  
    

像SO这样的网站如何快速提取这么多信息?

  

他们给你一个拉“太多”数据的错觉,但实际上他们一次得到一个块。基本上,您需要一个查询来获取结果的COUNT,另一个查询来获取该结果集中任何页面的数据。结果集未缓存。可以缓存查询的参数。但最好以每种页面请求提供查询参数的方式实现。

  
    

我需要缓存层吗?

  
可能是。但没有必要实现这一点。缓存可能对存储以前提取的页面很有用,整个社区使用相同的页面,而不是一个用户。

  
    

我应该预先计算消耗MySQL性能的分数等吗?

  

与此用例无关。

  
    

我应该使用一个写入优化表和一个读取优化表吗?如果是这样,我怎样才能检索SO上的实时数据?

  

不需要。

  
    

我应该离开MySQL吗?

  

不需要。

有关此概念的更多详细信息,请查找分页的Ajax网格