数据库设计:一个巨大的表还是单独的表?

tho*_*ulb 24 sql-server database-design data-warehouse sql-server-2008

目前我正在设计一个供我们公司使用的数据库.我们正在使用SQL Server 2008.该数据库将保存从多个客户收集的数据.该数据库的目标是获取多个客户的总基准数.

最近,我特别担心一张桌子会变得非常大.每个客户拥有大约20.000.000行数据,数据库中很快就会有30个客户(如果不是更多).将在此表上进行大量查询.我已经注意到性能问题和暂时被锁定的用户.

我的问题是,我们将来能够处理这个表,还是将这个表拆分成每个客户的小表更好?


更新:自我们第一次创建表格以来,现在已经有半年了.按照下面的建议,我创建了一些巨大的表格.从那时起,我一直在试验索引,并决定在前两列(医院代码和部门代码)上的聚集索引,如果我们有企业版,我们将对表进行分区.直到最近,这种设置工作正常,正如Galwegian预测的那样,性能问题正在兴起.重建索引需要很长时间,用户互相锁定,查询经常花费的时间超过应有的时间,对于大多数查询,首先将相关部分数据复制到临时表中,在临时表上创建索引并运行查询.这不是应该的样子.因此,我们正在考虑购买企业版以使用分区表.如果购买无法完成,我计划使用变通方法在Standard Edition中完成分区.

Gal*_*ian 16

从一个大表开始,然后在适当的情况下应用2008的表分区功能,如果性能成为问题.


APC*_*APC 7

数据仓库应该很大(线索在名称中).根据仓储标准,二千万行大约是中等的,尽管六亿可以被认为是大的.

要记住的是,这样的大型桌子具有不同的物理特性,如黑洞.因此调整它们需要一组不同的技术.另一方面,数据仓库的用户必须明白他们正在处理大量数据,因此他们不能指望每个查询都有亚秒响应(或者实际上是亚分钟).

分区可能很有用,特别是如果您有明确的分界,例如,在您的情况下,CUSTOMER.您必须意识到,分区会降低跨越分区键的粒度的查询的性能.所以它不是一颗银弹.


Sjo*_*erd 6

出于性能原因拆分表称为分片.此外,数据库模式可以或多或少地标准化.规范化模式具有单独的表,它们之间具有关系,并且数据不会重复.