繁体   English   中英

性能问题sql

[英]Performance question sql

我正在建立一个论坛。

我想知道我是否应该在主题表中存储回复数量或计算主题的帖子?
如果我使用sql并计算它们会慢多少? 可以说我有十亿个帖子。 它会慢得多吗? 我不打算那么大但是如果呢? 与主题中的数字相比,我会慢多少?

谢谢

随着数据库大小的增长,速度会变慢。 如果您计划拥有一个大型post表,请将值存储在主题表中

我刚刚在一个MySQL 4.0盒子上运行了一些测试,我们使用了一个包含超过100万条记录的表。

SELECT COUNT(*) FROM MyTable; 大约100万花了22ms

SELECT COUNT(*) FROM MyTable WHERE Role=1; ~80万需要3.2秒

SELECT COUNT(*) FROM MyTable WHERE Role=2; ~20耗时12毫秒

本案例中的Role列已编制索引,并且远程连接到MySQL。

我认为你的帖子表必须非常大,以便查询时间真正成为一个问题。 我还认为在主题表中放置计数缓存是一种预优化。 现在没有它构建它, 如果它成为一个问题,它是一个非常容易的更新来改变它。

  1. 不要将值存储在表中。
  2. 缓存应用程序中的值一段时间,因此count(*)查询不会经常执行。
  3. 根据服务器负载选择缓存时间:非常繁忙时为高,对于几个用户为零。

SqlServer中的count(*)非常快(假设您在该字段上有索引)。 所以你只需要减少重负荷下的命中数。
如果您将值存储在表中,则会有很多麻烦维护它。

这将影响缩放并且是标准化的问题。 硬核规范化书呆子会告诉您不应该保留主题上的帖子数量,因为它会导致冗余数据。 但是你需要记住,如果你不存储它,你需要在每次加载时进行额外的查询来获取数字。 另一种方法是对每个更新/插入执行额外的查询,这几乎总是比select的更少。 在扩展站点以支持大量流量时,几乎不可避免地必须最终开始对某些数据进行反规范化,尤其是在这种情况下。

冗余数据本质上不是坏事。 冗余管理不善。 只要您有适当的检查以防止数据不同步,那么在线程上存储帖子数量的潜在好处值得额外的代码IMO。

我认为这很大程度上取决于你推送数据的速度有多快。如果你将值存储在主题表中,那么你可能会发现你需要增加(或者如果删除记录则减少) 。

索引(索引?)可能是一个更好的选项,因为您可以存储一小部分数据,并能够访问更丰富的信息。 考虑一下这个事实,即计算电话簿中有多少Farleys是非常快的,因为我可以直接在那里轻松统计它们。

因此,通常情况下,答案可能是“这取决于”。

我喜欢在表中存储计数而不是每次计数。 这是一个如此简单的操作,你永远不必考虑在你检索它时显示它的费用。 有了一个论坛,你会更频繁地展示它,而不是你要改变它,所以让它尽可能便宜是有意义的。 这可能有点为时过早,但以后可能会让你感到头疼。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM