我正在更新我们的某个网络应用中的遗留代码。该应用程序允许用户上传电子表格,我们将处理该电子表格作为后台作业。
这些用户上传中的每一个都会创建一个新表来存储电子表格数据,因此我的SQL Server 2000数据库中的表数量将快速增长 - 近期内有数千个表。我担心这可能不是SQL Server优化的东西。
将这种机制保持原样是最简单的,但我不想留下一个随后爆炸的定时炸弹。如果需要修复,最好立即修复它(显而易见的替代方案是一个大表,其中一个键将记录与用户批次相关联)。
随着表数量的增长,这种架构是否会产生性能问题?如果是这样,可以通过升级到更高版本的SQL Server来缓解问题吗?
修改:回答问题的更多信息:
答案 0 :(得分:3)
拥有多个表不是引擎的问题。目录元数据针对非常大的尺寸进行了优化。让每个用户拥有其表有一些优点,例如每个表具有单独的安全ACL的能力,每个用户内容的单独表统计信息,以及“偶然”表扫描的改进查询性能。
虽然是维修但问题是什么。如果您将其保留在原位,则必须完全设置自动维护任务,您不能将其作为管理员的手动任务。
答案 1 :(得分:2)
拥有所有这些表并不适合任何数据库。上传后,Web应用程序是否使用新创建的表?也许它会向用户提供有关上传内容的一些反馈?
您的应用程序是否将所有这些表用于任何报告等?你提到让它们保持几个月 - 不知道为什么。如果没有将内容移动到中央表并删除单个表。
一旦后端得到处理,重新编码网站以将上传保存到中央表。您可能需要两张桌子。一个UploadHeader表,用于跟踪上传批次:谁上传,何时等,并链接到详细信息表,其中包含来自Excel上传的各个记录。
答案 2 :(得分:1)
我认为这绝对是一个后来会很痛苦的问题。为什么每次都需要创建一个新表?除非有充分的理由这样做,否则我不会这样做。
最好的方法是简单地创建一个ID并将所有上传的数据与ID相关联,所有这些都在同一个表中。这将需要您的一些工作,但它更安全,更易于管理。
答案 3 :(得分:0)
我建议您将这些数据存储在一个表中。在服务器端,您可以创建一个控制台,用户/操作员可以从中手动启动释放表条目的任务。您可以询问他们不再需要数据的日期范围,并且将从数据库中删除相同的数据。
您可以提前一步并设置数据库触发器以在指定的时间段后擦除条目/记录。您可以再次添加用户/操作员/管理员可以设置这些数据有效性限制的UI
因此,您可以创建系统,以便在指定时间后自动删除垃圾数据,管理员可以再次设置垃圾数据,并为他们提供一个控制台,使用该控制台可以手动删除其他不需要的数据。