SQL拆分/合并表分区:最佳实现方法是什么?
时间:2020-03-06 15:00:08 来源:igfitidea点击:
Microsoft在其有关更改SQL 2005分区的MSDN条目中,列出了几种可能的方法:
- 使用所需的分区功能创建一个新的分区表,然后使用INSERT INTO ... SELECT FROM语句将旧表中的数据插入到新表中。
- 在堆上创建分区的聚集索引
- 通过使用带有DROP EXISTING = ON子句的Transact-SQL CREATE INDEX语句来删除并重建现有的分区索引。
- 执行一系列ALTER PARTITION FUNCTION语句。
知道对于大型DB(数百万条记录)具有基于记录日期进行分区(例如月度分区)的最佳方法是什么,该方法的数据分布在1-2年内?
另外,如果我主要访问(阅读)最近的信息,那么在最近X天内保留一个分区是否有意义,而其余所有数据将是另一个分区?还是也对其余数据进行分区更好(对于基于日期范围的任何随机访问)?
解决方案
我建议第一种方法是创建一个新的分区表并将其插入其中,因为它使我们可以比较旧表和新表。我们可以针对两种样式的表测试查询计划,然后在过渡到新表设计之前查看查询是否确实更快。我们可能会发现没有任何改善,或者我们可能想尝试几种不同的分区功能/方案,然后才能确定最终结果。我们可能希望对日期范围以外的其他对象进行分区,但日期并不总是有效。
我已经对300-500m行表进行了分区,数据分布了6-7年,而表插入方法是我发现最有用的方法。
我们询问有关如何分区的最佳答案是尝试设计分区,以便查询将到达一个分区。如果我们倾向于将查询集中在最近的数据上,并且如果我们在where子句中对该日期字段进行过滤,那么可以,请在最近的X天中使用单独的分区。
请注意,我们必须在where子句中指定分区字段。如果我们未指定该字段,那么查询可能会遍历每个分区以获取数据,到那时我们将不会获得任何性能提升。
希望对我们有所帮助!我已经做了很多分区工作,如果我们想发布一些表结构和查询的示例,那将有助于我们为环境找到一个更好的答案。