我有一个 MySQL 表来存储用户统计信息,其中包含 >2MM 行和 8 列以及 userID 上的索引。当用户访问他的个人资料时,会从数据库中检索大量信息,从而导致(最坏的情况)有时会与其他表连接的几十个 SELECT 查询。它类似于 SO 上的配置文件,它也必须提取大量数据。
一些查询(例如获取用户分数)需要 COUNT
和其他消耗 MySQL 性能的函数。因此,仅查询个人资料页面就可能需要长达 10-20 秒的时间。
现在我的问题:
- 像 SO 这样的网站如何快速获取如此多的信息?
- 我需要缓存层吗?
- 我应该预先计算 消耗MySQL性能的分数等?
- 我应该使用一个吗 写优化表和一张读优化表?如果是这样怎么办 我可以像 SO 一样检索实时数据吗?
- 我应该放弃 MySQL 吗?
最佳答案
block 引用>How does a website like SO pull so many informations that quickly?
它们给你一种提取“这么多”数据的错觉,但实际上它们一次只能获取一大块。基本上,您需要一个查询来获取结果的 COUNT,并需要另一个查询来获取该结果集中任何页面的数据。结果集不被缓存。查询的参数可以被缓存。但最好以每个页面请求都提供查询参数的方式来实现。
block 引用>Do I need a caching layer?
也许是。但没有必要实现这一点。缓存对于存储先前获取的页面可能很有用,并且相同的页面由整个社区而不是一个用户使用。
block 引用>Should I precalculate the count of the score, etc. that consume MySQL performance?
与此用例无关。
block 引用>Should I use one writing optimized table and one reading optimized table? If so how could I retrieve live data like on SO?
不需要。
block 引用>Should I move away from MySQL?
不需要。
有关此概念的更多详细信息,请查找分页 Ajax 网格
关于大表上的 MySQL 性能问题 - 如何有效地缓存结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531106/