基于主键插入

时间:2014-02-11 20:27:22

标签: sql sql-server etl data-warehouse

在我们的数据仓库(SQL Server 2005)中,我们尝试按主键的顺序插入/更新记录。换句话说,我们从源表中提取并在DW 中发出ORDER BY 主键。这是一种标准做法,可以在硬盘驱动器上按逻辑顺序保持数据读/写并提高性能。 (如果这不准确,请告诉我。)

在非常大的源表上发出ORDER BY时,这确实会导致性能下降。有没有其他方法可以得到相同的结果?我正在考虑索引重建和计算统计的某种组合?

希望有道理!我不是DBA!感谢。

4 个答案:

答案 0 :(得分:0)

我不知道这是否是“标准做法”,但我在一个仓库工作,我们的典型表格接近十亿条记录。我们总是删除索引,插入新数据,然后重建索引。有人在某种程度上确定这是我们这样做的最有效方式。我相信这里有人可以了解页面大小和物理属性(这可能比你需要知道的更多,因为你说你不是DBA),但简短的回答是这样做。

如果您决定使用该路由,请始终记住先删除非聚集索引,然后删除聚簇。重建它们时,请以相反的顺序重建它们(首先是群集,然后是非群集)。

答案 1 :(得分:0)

如果您想强制执行特定订购,则必须具有order by子句。没有ifs,ands或buts。要排序的列上的聚簇索引可能会使选择运行更快,但构建该索引可能最终会占用原始查询。

我会研究重新排序目标表的替代方法(正如Johnny Bones的回复中所述)。

答案 2 :(得分:0)

如果该表没有索引,那么这些页面将不会与磁盘上的任何特定顺序一起存储。对于没有任何索引的大型表,来自所述表的SELECT ..... ORDER BY将存在性能问题。

听起来你需要一个主键索引。

答案 3 :(得分:0)

如果您从中提取的表在PK上有一个聚簇索引(它应该),那么按PK顺序返回记录应该没有性能影响。您遇到的任何性能问题可能是由于您返回的记录数量过多(而不是ORDER BY)。

我认为我完全不明白你想要做什么。但是按顺序恢复记录应该不是问题。