是否可以在SQL Server中一次分区多个方法?

时间:2009-11-30 07:12:00

标签: sql-server partitioning database-partitioning

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

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

2 个答案:

答案 0 :(得分:1)

您无法计算分区键。使用计算的持久列作为密钥:

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

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

答案 1 :(得分:0)

跨越一组分区表的DPV是您实现此目的的唯一干净选项,例如跨越tblSales2007的DPV,tblSales2008,tblSales2009,然后每个相应的销售表再次进行分区,但它们可以被分区一把不同的钥匙。在操作恢复方面有一些非常好的好处(一个分区表离线不会使DPV失效 - 它仍然可以满足其他时间线的查询)

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

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

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

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