Newsequentialid()作为索引列?

时间:2013-12-29 11:51:00

标签: tsql ssis

我有一个newsequentialid()作为GUID列,我想知道我是否应该将列索引为Clustered或Non-Clustered Index,因为我将使用GUID进行查询。

我也会每周在表格中插入数据。

1 个答案:

答案 0 :(得分:0)

通常,是的在表上放置聚集索引。但是哪些列用作聚簇索引? Please see this answer。应该指向正确的方向。特别是GUIDs as PRIMARY KEYs and/or the clustering key的链接。很大程度上取决于您的GUID的性质。用金伯利·特里普的文章来解释:一个不顺序的GUID可能是一个糟糕的选择。例子:

  • 在客户端生成(使用.NET)
  • 由newid()函数生成

由于这个决定还有更多的内容,我建议你阅读@marc_s提供的完整答案以及Kimberley Tripp的整篇文章。

对于通过SSIS的每周数据插入,请考虑以下步骤:

  • 在插入
  • 之前删除目标表的索引
  • 使用数据流加载目标表
  • 使用“数据访问模式:”=“表或视图 - 快速加载”
  • 配置OLE DB目标
  • 在插入
  • 后重建目标表的索引

根据您的具体情况,这可以实现更快的插入,并为您提供一个干净的索引,其统计数据是最新的,碎片为零或接近零。

我意识到您的问题表明您正在使用newsequentialid()While I was reading this article on TechNet此函数生成的值的实际顺序性质需要注意:重新启动Windows后,GUID可以从较低范围重新开始,但仍然是全局唯一的。这会影响您对GUID的下游使用吗?

我想我想知道为什么你发现有必要使用GUID以及为什么在你的情况下这是一个更好的选择,而不是基于整数的SEQUENCE,它会使你的主键聚集索引显着变小。