留言板结构数据库

时间:2015-01-27 01:16:02

标签: mysql sql database database-design

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

表格 - 主题

  • 主题名称
  • 主题ID

表格 - 回复

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

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

关于如何构建这个的任何想法?

1 个答案:

答案 0 :(得分: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,你需要担心数据传输时间,但从数据库中检索应该是好的和快速的。