0

Microsoft 在其关于更改 SQL 2005 分区的 MSDN条目中列出了一些可能的方法:

  • 使用所需的分区函数创建一个新的分区表,然后使用 INSERT INTO...SELECT FROM 语句将旧表中的数据插入到新表中。
  • 在堆上创建分区聚集索引
  • 使用带有 DROP EXISTING = ON 子句的 Transact-SQL CREATE INDEX 语句删除并重建现有分区索引。
  • 执行一系列 ALTER PARTITION FUNCTION 语句。

任何想法对于具有基于记录日期的分区(例如每月分区)的大型数据库(数百万条记录)来说,最有效的方法是什么,其中数据分布在 1-2 年内?

另外,如果我主要访问(用于阅读)最近的信息,那么在最后 X 天保留一个分区是否有意义,而所有其余数据将是另一个分区?还是对其余数据也进行分区更好(对于基于日期范围的任何随机访问)?

4

1 回答 1

2

我推荐第一种方法——创建一个新的分区表并插入其中——因为它让你可以比较新旧表。您可以针对这两种样式的表测试查询计划,并在切换到新表设计之前查看您的查询是否确实更快。您可能会发现没有任何改进,或者您可能想在确定最终结果之前尝试几种不同的分区功能/方案。您可能希望对日期范围以外的内容进行分区 - 日期并不总是有效的。

我已经对 300-500m 行表进行了分区,这些表的数据分布在 6-7 年之间,而表插入方法是我发现最有用的方法。

您询问了如何分区 - 最好的答案是尝试设计您的分区,以便您的查询将命中单个分区。如果您倾向于将查询集中在最近的数据上,并且如果您在 where 子句中过滤该日期字段,那么是的,对于最近 X 天有一个单独的分区。

请注意,您必须在 where 子句中指定分区字段。如果您没有指定该字段,则查询可能会访问每个分区以获取数据,此时您将不会获得任何性能提升。

希望有帮助!我已经做了很多分区,如果您想发布一些表结构和查询的示例,这将帮助您为您的环境获得更好的答案。

于 2008-10-19T17:12:12.733 回答