TSql,在数据输入之前或之后构建索引

时间:2010-10-28 12:39:06

标签: performance tsql sql-server-2008

关于索引大量数据的性能问题。我有一个大表(约3000万行),其中4列被索引以便快速搜索。目前我设置了索引(索引?),然后导入我的数据。这大约需要4个小时,具体取决于数据库服务器的速度。首先导入数据然后执行索引构建会更快/更有效吗?

3 个答案:

答案 0 :(得分:8)

我会回答af的答案,说它可能就是“索引优先,插入后”比“先插入,索引后”在哪里插入记录的情况具有聚簇索引的表,但不以该索引的自然顺序插入记录。原因是对于每个插入,数据行本身必须在磁盘上进行排序。

作为示例,请考虑uniqueidentifier字段上具有聚簇主键的表。 guid的(几乎)随机性质意味着可以在数据顶部添加一行,导致当前页面中的所有数据被拖曳(也可能是较低页面中的数据),但是下一行添加在底部。如果群集已打开,例如,日期时间列,并且您恰好按日期顺序添加行,那么记录将自然地以正确的顺序插入磁盘,并且不需要昂贵的数据排序/重排操作。

我支持Winston Smith的答案“它取决于”,但建议你的聚集索引可能是决定哪种策略在当前情况下更快的一个重要因素。你甚至可以尝试根本没有聚集索引,看看会发生什么。让我知道吗?

答案 1 :(得分:3)

在索引到位时插入数据会导致DBMS在每行之后更新它们。因此,首先插入数据并在之后创建索引通常会更快。特别是如果有那么多数据的话。

(但是,总有可能存在可能导致不同性能特征的特殊情况。尝试它是唯一可以确定的方法。)

答案 2 :(得分:3)

完全取决于您的特定数据和索引策略。你在这里得到的任何答案都是猜测。

唯一可以确定的方法是尝试两种方法并进行适当的测量,这并不困难。