留言板结构数据库

Structure Database for Message Board

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

Table - 主题

Table - 回复

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

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

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

在您的场景中,您可能会在主题 Id 列上创建一个索引(并且可能包括日期)。在查找您的回复 table 时,至少在留言板浏览场景中,您可能只有一个主题可以获取回复。您的所有查询都将产生以下效果:

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

索引(取决于聚簇或非聚簇)要么按照索引(聚簇)的顺序对数据进行排序,要么按照聚簇索引(非聚簇)上数据的指针位置排序 - 这允许在适当的目标查询中更快地检索数据(例如在对 topicId 建立索引时询问特定的 topicId)。

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

您可以在这里阅读更多关于聚簇索引与非聚簇索引的描述:What do Clustered and Non clustered index actually mean? 它比我以往任何时候都更好地解释了它:)

对于您的具体问题,使用上述索引,就行号而言,您真的不应该看到任何数据检索问题 - 如果有的话,它可能是 amount 需要通过线路传输的数据。极端情况下,如果每个 "reply" 长度为 1MB,一个线程有 100 个回复,您需要担心由于传输 100MB 而导致的数据传输时间,但从 DB 检索应该没问题又快。