这个问题与另一个问题有关:
拥有多个文件组有助于加快我的数据库吗?
我们正在开发的软件是一个分析工具,它使用 MS SQL Server 2005 来存储关系数据。初始分析可能很慢(因为我们正在处理数百万或数十亿行数据),但快速调用以前的分析有性能要求,因此我们“保存”每个分析的结果。
我们目前的方法是将分析结果保存在一系列“特定于运行”的表中,并且分析非常复杂,以至于每次分析可能会得到多达 100 个表。通常,这些表每次分析使用几百 MB(与我们数百 GB 或有时多个 TB 的源数据相比,这很小)。但总的来说,磁盘空间对我们来说不是问题。每组表都特定于一个分析,在许多情况下,这为我们提供了比引用源数据更大的性能改进。
一旦我们积累了足够多的已保存分析结果,这种方法就开始失效——在我们添加更强大的归档/清理功能之前,我们的测试数据库已攀升至数百万张表。但是,即使在生产中,拥有超过 100,000 张桌子对我们来说也不是一件容易的事。Microsoft 对 sysobjects 的大小(约 20 亿个)设置了一个非常巨大的理论限制,但是一旦我们的数据库增长到超过 100,000 个左右,像 CREATE TABLE 和 DROP TABLE 这样的简单查询就会显着减慢。
我们有一些空间来讨论我们的方法,但我认为如果没有更多上下文,这可能很难做到,所以我想更笼统地问这个问题:如果我们被迫创建这么多表,管理的最佳方法是什么他们?多个文件组?多个模式/所有者?多个数据库?
另一个注意事项:我对“简单地解决问题”(即增加 RAM、CPU 功率、磁盘速度)的想法并不感到兴奋。但我们也不排除它,特别是如果(例如)有人可以明确地告诉我们添加 RAM 或使用多个文件组将对管理大型系统目录产生什么影响。