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

Joh*_*ohn 8 t-sql performance sql-server-2008

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

Nei*_*oss 8

我会回答af的答案,说可能是"索引优先,插入后"比"先插入,索引后"慢的情况,你将记录插入带有聚簇索引的表中,但不插入记录按该索引的自然顺序排列.原因是对于每个插入,数据行本身必须在磁盘上排序.

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

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