如果我要为留言板创建SQL数据库,建议使用以下配置来存储对主题的回复吗?
表格 - 主题
表格 - 回复
我问的原因是因为在我看来,在回复表中数十万行之后,加载一个主题需要很长时间,因为服务器必须搜索主题ID的所有提及在回复表中,然后组装它们并将它们呈现给用户。
关于如何构建这个的任何想法?
答案 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,你需要担心数据传输时间,但从数据库中检索应该是好的和快速的。