2015-06-03 60 views
0

假设我们有一个巨大的表,我们运行非常复杂的查询。表分区与多个表

说这是一个客户关系管理,我们有一个表叫做人[ID(GUID),listId(GUID),姓名,电子邮件,城市,......]

它会更好,以表示此按用户如此多张表:

People_<USER_ID>,如果我们有100个用户,我们有100个这样的表

或者像上面与我们划分在user_id列

一个表?

谢谢

+0

“巨​​大”有多大?你多久更新一次表格(插入/更新/删除)?你多久添加一次“用户”? –

+0

每天少于100个用户。 巨大的数据量为1亿,所以在表中执行的查询时数量并不是很大,但却非常复杂。假设这些方法不能被进一步简化 – user2624034

回答

0

每种方法都有其优点和缺点。例如,如果使用单独的表,则可以对每个表执行维护,例如重建索引或统计信息,如果添加新用户,则创建新表非常简单,而不是修改分区函数。

使用分区表,查询将大大简化,因为您不会依赖每个表的UNION查询。

中途地面是使用分区视图;即建立一个视图,该视图具有联合在一起的各个表的定义。这提供了分区表的一些优点,但如果添加新表并使用100个表,则视图定义将需要维护,这将非常不便。

分区表通常最适用于数据仓库类环境,您可以在其中创建一个装载表,并将其添加为每个数据负载的新分区。在这种环境下,通常只有在定义的时间将数据写入一个分区,并在其余时间从所有分区读取数据。

如果您的数据量非常大,那么就执行维护任务所需的时间而言,如果只需要一个或多个分区,分区可能会带来一些好处。但是,最好找到适应此的分区功能。例如,如果您的行只写入一次而没有更新,那么添加一个创建的日期时间并对其进行分区,或者使用递增的主键和分区来表示您将只需要重新索引活动分区。

+0

我还补充说,这两种方法都会显着提高查询时间,其中的行落入一个分区/表中。但是,在只有一部分数据是“活动”的情况下,分区是最有用的,并且通过它的声音,您将读取/写入所有分区。在多个表格上使用分区可能不会给您带来任何好处,除了整洁以及能够在不损坏滚动条的情况下查看SSMS中的所有表格。 –

+0

让我澄清,因为我以前不是很清楚。我一次只能从一个用户分区读取数据 - 对于一个用户也是如此。所以我永远不会结束联盟和奇怪的情况(现在我想不出来),那么就这样吧。 – user2624034

+0

当您只是一般地写入/更新一个分区时,分区是最有用的,而所有其他分区都是静态的并且基本上是只读的。分区的真正优势在于分区可以轻松进入和退出,只需要对表进行简短的模式锁定即可。相比之下,重建索引视图时,其定义更改可能会很慢,并且需要在内存中/磁盘上占用大量空间。如果你不打算这样做,你将不会获得这个优势。 –