【问题标题】:Structure Database for Message Board留言板结构数据库
【发布时间】:2015-01-27 09:43:08
【问题描述】:

如果我要为留言板创建 SQL 数据库,是否建议使用以下配置来存储对主题的回复?

表格 - 主题

  • 主题名称
  • 主题 ID

表格 - 回复

  • 发布文字
  • 主题 ID
  • 日期
  • 时间

我问的原因是因为在我看来,在回复表中有数十万行之后,加载一个主题需要很长时间,因为服务器必须搜索所有提及主题 ID在回复表中,然后将它们组合起来并呈现给用户。

对如何构建这个有什么想法吗?

【问题讨论】:

  • 这对我来说是正确的。确保您的 ID 已编入索引并与外键相关,并且引擎应该能够足够快地检索记录。

标签: mysql sql database database-design


【解决方案1】:

这是一个非常基本的索引用例。

在您的场景中,您可能会在主题 Id 列上放置一个索引(并可能包括日期)。在您的回复表上进行查找时,至少在留言板浏览场景中,您可能只有一个主题可以得到回复。您的所有查询都会产生以下影响:

select *
from replies
where tepicId = 1 -- my specific topic id example

索引(取决于聚簇或非聚簇)按索引顺序(聚簇)或指向聚簇索引上数据的指针位置(非聚簇)对数据进行排序 - 这样可以更快在适当的目标查询中检索数据(例如在 topicId 上有索引时要求特定的 topicId)。

索引的问题,虽然它们(通常)可以使查询更快(假设有适当的索引),但您拥有的索引越多,插入语句所需的时间就越长。这是由于数据被写入多个位置 - 表本身以及支持该表的索引。

您可以在此处阅读有关聚集索引与非聚集索引的描述的更多信息:What do Clustered and Non clustered index actually mean? 它解释得比我以往任何时候都好 :)

对于您的具体问题,利用上述索引,就行号而言,您真的不应该看到任何数据检索问题 - 如果有的话,它可能是 数据量那需要穿越这条线。在极端情况下,如果每个“回复”的长度为 1MB,并且对一个线程有 100 条回复,您将需要担心由于 100MB 的传输而导致的数据传输时间,但从数据库中检索应该是好的和快速的.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2023-03-26
    • 2010-10-30
    • 1970-01-01
    • 2013-09-13
    相关资源
    最近更新 更多