【问题标题】:Newsequentialid() as an Index Column?Newsequentialid() 作为索引列?
【发布时间】:2014-01-16 11:19:44
【问题描述】:

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

我还将每周向表中插入数据。

【问题讨论】:

  • 如果你还没有聚集索引,不妨用完。
  • 给出的答案有很多很好的信息。我当然也想问人们是否非常确定他们需要 GUID……你确定吗? :) 他们有一席之地,但并不常见。如果您不需要在全球范围内唯一的标识符,则可能不需要 GUID。

标签: tsql ssis


【解决方案1】:

一般来说,是的,在您的表上放置一个聚集索引。但是使用哪些列作为聚集索引? Please see this answer。应该为您指明正确的方向。特别是指向GUIDs as PRIMARY KEYs and/or the clustering key 的链接。很大程度上取决于您的 GUID 的性质。套用 Kimberley Tripp 的文章:不连续的 GUID 可能是一个糟糕的选择。例子:

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

由于这个决定远不止于此,我建议您阅读@marc_s 提供的完整答案以及 Kimberley Tripp 的整篇文章。

就通过 SSIS 插入每周数据而言,请考虑以下步骤:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2014-09-29
    • 2020-11-21
    相关资源
    最近更新 更多