1

我正在考虑用各种方法在 SQL Server 中对我的数据进行分区。我正在研究的一种方法是将一个特定的大表划分为 8 个分区,然后在每个分区中对不同的分区列进行分区。这在 SQL Server 中是否可能,或者我是否仅限于为每个表定义一个分区列+函数+方案?

我对更一般的答案很感兴趣,但是我正在考虑为分布式分区视图采取这种策略,在第一个方案下,我将使用 DPV 对数据进行分区,以将大量数据分布到 8 台机器上,然后在每个机器分区上,完整表的一部分在另一个分区键上,以便能够根据需要删除(例如)子分区。

4

2 回答 2

1

无法计算分区键是不正确的。使用计算的持久列作为键:

ALTER TABLE MYTABLE ADD PartitionID AS ISNULL(Column1 * Column2,0) persisted

我一直这样做,非常简单。

于 2012-06-01T18:16:10.363 回答
0

跨一组分区表的 DPV 是实现此目标的唯一干净选项,例如跨 tblSales2007、tblSales2008、tblSales2009 的 DPV,然后每个相应的销售表再次分区,但它们可以通过不同的键进行分区. 在操作弹性方面这样做有一些非常好的好处(一个分区表脱机不会降低 DPV - 它仍然可以满足对其他时间线的查询)

hack 选项是创建 2 列的任意散列并存储每条记录,并按它进行分区。您必须为每个查询/插入等生成此哈希,因为无法计算分区键,它必须是存储值。这是一个 hack,我怀疑会失去比你获得的更多的性能。

但是,您确实必须考虑特定的管理问题/ DR 超过数据量,如果数据量非常大并且您以主要读取机制访问它,那么您应该查看 SQL 'Madison',它将在这两个数量上都大幅扩展行数以及数据的总体大小。但它真的只适合99.9%读类型的数据仓库,不适合OLTP。

我的生产数据集位于“数十亿”括号中,它们驻留在分区表系统上并提供非常好的性能——尽管其中大部分是基于系统底层的硬件,而不是数据库本身。扩大到这个水平不是问题,我知道其他人也远远超出了这些数量。

每个表的最大分区数保持在 1000,据我记得关于此的对话,这是一个由执行的测试设定的数字 - 由于技术限制,不是一个合适的数字。

于 2009-11-30T08:57:31.963 回答