Sql server 使用聚集索引优化将数据加载到表中

Sql server 使用聚集索引优化将数据加载到表中,sql-server,sql-server-2012,etl,Sql Server,Sql Server 2012,Etl,我在SQL2012 Enterprise上有一个每月完全刷新的数据集市。装载大约需要8小时。这并不是一个直接的问题,但是推动这些数据的团队还有很多事情要做,所以我想保持简短 每个表有一个聚集索引。 大多数表都有其他(可能是columnstore)索引 我现在的想法是 删除除聚集索引以外的所有索引(它们保留) 截断所有表 将数据推送到按聚集索引排序的表中 重新创建非聚集索引 如果我加载已排序的数据,这是否真的很重要?只按顺序创建所有页面是有意义的,而且永远不必拆分/重新组织,但我看不到在任何地方提

我在SQL2012 Enterprise上有一个每月完全刷新的数据集市。装载大约需要8小时。这并不是一个直接的问题,但是推动这些数据的团队还有很多事情要做,所以我想保持简短

每个表有一个聚集索引。 大多数表都有其他(可能是columnstore)索引

我现在的想法是

  • 删除除聚集索引以外的所有索引(它们保留)
  • 截断所有表
  • 将数据推送到按聚集索引排序的表中
  • 重新创建非聚集索引
  • 如果我加载已排序的数据,这是否真的很重要?只按顺序创建所有页面是有意义的,而且永远不必拆分/重新组织,但我看不到在任何地方提到过它。有经验吗?或者加载不带索引的表(即使没有聚集索引)更好吗


    我会自己做实验,但考虑到不同的团队和工作量,这将非常困难。如果任何人有具体的经验,将不胜感激

    我不能给您一个明确的答案,但根据我的经验,在加载(无序)数据之前删除所有索引(集群和非集群),对于数据仓库工作负载来说似乎是最快的。但是,如果您没有花费大量时间在ETL中对数据进行排序,那么您肯定应该保留聚集索引。如果我没有添加指向的链接,那将是我的失职,该链接在这个主题上不是非常确定的词,但它很接近。特别是,跟踪标志610(它支持对聚集索引插入进行最小日志记录)允许在大分区表上进行大容量加载,其效率远远高于删除聚集索引。您的问题的完整答案取决于您在实际大容量加载中使用的技术。例如,
    SqlBulkCopy
    不支持排序提示,因此在将数据推送到SQL Server之前是否对其进行预排序无关紧要——无论如何都必须在服务器端对其进行排序。一般来说,推送排序的数据是一个好主意,前提是您可以通知SQL Server这种情况。您好,它是通过DataStage从iSeries数据库推送的。?我们有一个
    datastage
    标签,如果合适,可以随意添加。在我看来,就性能而言,您会受到DataStage如何将数据推送到服务器的限制,对吗?