【发布时间】:2011-02-15 12:25:11
【问题描述】:
目前我正在设计一个用于我们公司的数据库。我们使用的是 SQL Server 2008。该数据库将保存从多个客户那里收集的数据。该数据库的目标是获取多个客户的总体基准数据。
最近,我特别担心一张桌子会变得非常大。每个客户大约有 20.000.000 行数据,数据库中很快就会有 30 个客户(如果不是更多的话)。将在此表上进行大量查询。我已经注意到性能问题和用户被暂时锁定。
我的问题是,我们将来是否能够处理这张桌子,还是将这张桌子拆分为每个客户的小桌子更好?
更新:距离我们第一次创建表格已经过去了大约半年。按照下面的建议,我创建了一些巨大的表格。从那时起,我一直是experimenting with indexes,并决定在前两列(医院代码和部门代码)上建立一个聚集索引,如果我们有企业版,我们会在上面对表进行分区。正如 Galwegian 预测的那样,这种设置直到最近都运行良好,性能问题正在涌现。重建索引需要很长时间,用户相互锁定,查询通常比他们应该花费的时间更长,对于大多数查询,首先将数据的相关部分复制到临时表中,在临时表上创建索引并运行询问。这不是应该的样子。因此,我们正在考虑购买企业版以使用分区表。如果购买无法通过我计划使用workaround to accomplish partitioning in Standard Edition。
【问题讨论】:
-
对于您的锁,您是否在 SELECT 语句中指定 NOLOCK 查询提示?
-
还没有,但现在我会的。谢谢。
-
再想一想,我可能不会,考虑到我在这个主题上找到的一些信息,以及下面的讨论。
-
表分区会有所帮助。此外,重建索引不会花费太多时间,因为现在索引将特定于每个分区
标签: sql-server sql-server-2008 database-design data-warehouse