sql server表中的表中的行数是否存在硬限制?我认为唯一的限制是基于物理存储。
在具有和不具有索引的表上,性能在什么时候显着降低(如果有的话)。对于非常大的桌子,是否有任何常见的实践?
为了提供一点领域知识,我们正在考虑使用Audit表,它将记录数据库中所有表的字段的更改,并想知道我们可能会遇到哪种类型的墙。
答案 0 :(得分:2)
您是正确的,行数受可用存储空间的限制。
很难给出任何数字,因为它在很大程度上取决于您的服务器硬件,配置以及查询的效率。
例如,随着行数的增加,一个简单的select语句运行得更快,并且显示出比全文或邻近搜索更少的退化。
答案 1 :(得分:2)
BrianV是对的。很难给出一条规则,因为它根据您将如何使用表格,如何编制索引,表格中的实际列等等而大幅变化。
对于常见做法......对于非常大的表,您可以考虑进行分区。如果您发现对于您的日志,您通常只关心过去1个月(或1天,1周,1年,等等)的变化,这可能特别有用。然后,您可以存档数据的旧部分,以便在绝对需要时可用,但不会妨碍您,因为您几乎从未真正需要它。
另一件需要考虑的事情是,如果您还没有计划这样做,那么为每个实际表都有一个单独的更改日志表。使用单个日志表非常难以使用。您通常必须在自由格式的文本字段中记录信息,这很难查询和处理。此外,如果每个已更改的列都有一行,则很难查看数据,因为您必须进行大量连接才能查看同时发生的更改。
答案 2 :(得分:2)
除了上述所有内容之外,我认为我会在索引/性能方面给出更多背景信息。
如上所述,无法根据索引的质量和数量给出性能数字,性能会有所不同。它还取决于您要优化的操作。你需要优化插入吗?或者你更关心查询响应?
如果你真的担心插入速度,分区,以及非常仔细的索引考虑将成为关键。
Tom H的单独表格推荐也是一个好主意。
答案 3 :(得分:1)
使用审计表时,另一种方法是每月(或一周取决于放入的数据量)大约每月存档一次数据。这样,如果您需要使用新数据重新创建一些最近的更改,可以对较小的表进行更快速的操作(从审计表中恢复几乎总是我发现的紧急任务!)。但是,如果您需要更长时间地返回,您仍然可以获得可用的数据。