SQL Server 2000 表

SQL Server 2000 表

我们目前有一个 SQL Server 2000 数据库,其中有一个表包含多个用户的数据。数据以 memberid 为键,该字段为整数。该表在 memberid 上有聚集索引。

该表现在大约有 2 亿行。索引和维护正在成为问题。我们正在讨论将表拆分为每个用户模型一个表。

这意味着我们最终会得到大量的表,如果只考虑正值的话,可能达到 2,147,483,647 个。

我的问题:

  1. 有谁有安装包含数百万张表的 SQL Server(2000/2005)的经验吗?

  2. 这种架构对于使用查询分析器、企业管理器等进行维护和访问有何影响?

  3. 在数据库实例中拥有如此大量的索引意味着什么。

欢迎大家提出意见。

谢谢

编辑:我不同意将这个问题迁移到 Serverfault。这是一个与编程相关的问题。

答案1

以下是一些想法:

1) 不要这么做。说真的。数百万张表格将是一场噩梦,而且可能造成的问题比它解决的问题多得多。

2) 如果您确实想将表拆分成多个表,则不需要使用那么多表。根据您的硬件,我认为 5000 万行没有问题,因此您可以将数据分成 4 个表。

3) 如果可能的话,我会升级到 SQL Server 2005 或 2008 并使用表分区。这样您就可以在表中细分数据。这不是一个完美的解决方案,但比数百万个表要好得多。

为了回答您的具体问题,我想说 SQL Server 不太可能在一个实例中处理那么多表,并且如果每个记录可以有一个表,那么查询分析器等将变得毫无用处。

快速补充:来自微软网站:

数据库对象包括所有表、视图、存储过程、扩展存储过程、触发器、规则、默认值和约束。数据库中所有这些对象的数量总和不能超过 2,147,483,647。

http://msdn.microsoft.com/en-us/library/aa933149(SQL.80).aspx

相当令人惊奇的是,这个数字正是您指定的数字......嗯......

答案2

索引维护应根据现有碎片进行,而不是盲目维护。使用聚集 IDENTITY 列,您不必担心太多。SQL Fool 的碎片整理脚本会有所帮助。

2 亿行数据不算多,也不值得分区,因为查询开销很大,很多表名需要动态 SQL 等。除非你有一个很小的维护窗口,否则

我们每天在一个表中插入大约600万行数据。

根据您提供的信息,痛苦比收获更糟糕。

答案3

拆分成这么多的表简直是一场噩梦,完全不建议这么做。除了其他复杂情况之外,想想添加新用户所需的复杂性——您是否必须动态创建新表?

答案很简单,就是更好的索引,专门针对您使用的查询进行设计。由于您没有详细说明这些查询,我无法给您具体的建议。

但一般来说,我们支持许多具有如此大表的数据库,是的,这可能很麻烦,但绝对是可能的。

如果你决定在那里实现分区,使用不同的数据划分方式(可能是当前数据与旧数据),以及合理较少的分区数量。请记住,如果您“手动”执行此操作(而不是使用 SQL 2005+ 分区功能),那么针对这些分区表的所有查询都可能需要重新设计。

编辑:针对您问题的一部分,我来具体回答一下,是的,当您有大量表时,企业管理器/查询分析器可能会开始做非常糟糕的事情。我们曾有过设计不佳的数据库,里面有数千个表,您甚至无法展开树视图中的“表”文件夹,除非等待很长时间才能将其全部列出。

答案4

听起来表分区是可行的方法。但是您至少需要 SQL Server 2005。

这是一篇关于该主题的好文章,可以帮助您入门Kimberly Tripp MSDN 文章

相关内容