Sql server 在分区级别删除索引

Sql server 在分区级别删除索引,sql-server,indexing,Sql Server,Indexing,您知道在SQLServer(2008)中是否有这样做的方法吗 我正在处理一个数据仓库加载过程,所以我想做的是删除正在加载的分区的索引,这样我可以执行快速批量加载,然后我可以在分区级别再次重建索引 我认为在Oracle中可以实现这一点,但在SQL Server中可能不行 谢谢, 维克托我知道在SQL 2005中这是不可能的。在2008年,我还没有听说有任何东西可以让你这么做,但它可能就在那里(我读过,但还没有使用过)。我能得到的最接近的结果是禁用索引,但如果禁用聚集索引,则无法再访问表。不是那么有

您知道在SQLServer(2008)中是否有这样做的方法吗

我正在处理一个数据仓库加载过程,所以我想做的是删除正在加载的分区的索引,这样我可以执行快速批量加载,然后我可以在分区级别再次重建索引

我认为在Oracle中可以实现这一点,但在SQL Server中可能不行

谢谢,
维克托

我知道在SQL 2005中这是不可能的。在2008年,我还没有听说有任何东西可以让你这么做,但它可能就在那里(我读过,但还没有使用过)。我能得到的最接近的结果是禁用索引,但如果禁用聚集索引,则无法再访问表。不是那么有用,伊姆霍

我的仓库ETL项目解决方案是创建一个表,列出所有索引和索引约束(PKs、UQ)。在ETL过程中,我们遍历表(对于加载的所需表集),删除索引/索引约束,加载数据,然后再次遍历表并重新创建索引/约束。有点难看,也有点尴尬,但一旦启动并运行它就不会崩溃——而且还有新构建的索引的额外优势(即没有碎片,fillfactor可以是100)。添加/修改/删除索引也很尴尬,但也不是那么难

您可以动态地执行此操作——从目标表读取和存储索引/约束定义,删除它们,加载数据,然后根据存储的数据动态地构建和运行(重新)创建脚本。但是,如果在跑步过程中发生了车祸,你就死定了。(这就是为什么我选择了固定的桌子。)


我发现这在表分区中非常有效,因为您完成了“加载”表的所有工作,而活动(dbo,对我们来说)表是未被触及的。

不,您不能只为单个分区删除表的索引。但是,SQL 2008提供了一种大容量加载方法,它涉及在同一文件组的单独分区上使用完全相同的架构设置第二个表,加载它,精确地索引它,然后使用生产表上的现有空分区“切换”新分区

不过,这是一个高度简化的描述。以下是针对SQL 2008的MSDN文章,介绍如何实现这一点:

谢谢你提供的信息,这正是我想要的。其实今天早上一位同事也给我解释了这个方法。