首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了提高性能,允许在数据库中使用冗余数据

为了提高性能,允许在数据库中使用冗余数据
EN

Stack Overflow用户
提问于 2010-02-03 20:21:36
回答 3查看 279关注 0票数 2

假设您正在为下一个堆栈溢出设计DB模式,更具体地说,是为模式中处理问题评级的部分设计DB模式。

我假设您会使用这样的表格:

评级(question_id、user_id、评级)

..。这将记录评分,并确保没有用户在同一问题上投票两次。

仅该表就可以处理评级数据,但它可能会导致查询速度较慢。

考虑到性能,您是否会考虑将每个问题的评分总和存储在问题表中,即使此数据是多余的,因为它是从评分表中的数据派生出来的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-03 20:29:47

我通常会首先从标准化模型开始,而不是对问题表中的评级总和进行反标准化。

然后,当应用程序工作得足够好时,我会做一些性能测试,以确定应用程序处理负载是否足够好--与我期望的生产环境中的负载相比。

如果它不能很好地处理负载,我将检查瓶颈--并纠正最重要的瓶颈,直到应用程序运行良好。

一旦应用程序投入生产,如果网站有很多opf用户,就是时候做一些额外的优化了。

为了让事情变得简单:

  • 不要让您的应用程序正常工作一旦应用程序正常工作,请对其进行基准测试如果需要,请优化

最后,是的,也许,将评分总和反规范化到问题表可能会有所帮助;但你需要这样做吗?

这才是真正的问题;-)

票数 6
EN

Stack Overflow用户

发布于 2010-02-03 20:25:48

如果您计划预聚合表,那么看一下物化视图(T-SQL中的索引视图)是值得的。

票数 0
EN

Stack Overflow用户

发布于 2010-02-04 02:25:45

一般而言,如果您知道数据读操作比写操作频繁得多,那么这是存储聚合值的有效方法。在这种特定的情况下,我还会考虑以这种方式对answers表进行物理设计,这使得聚合变得便宜。为此,我将在query_id、answer_id上定义聚集索引。因此,只会从磁盘中读取几个DB页,以获取特定查询的所有答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2191774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档