问题标签 [newsequentialid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4033 浏览

sql - 在现有表上将 newid() 更改为 newsequentialid()

目前,我们有许多在主键上使用 newid() 的表。这导致了大量的碎片。因此,我想将列更改为使用 newsequentialid() 。

我想现有数据将保持相当碎片化,但新数据将不那么碎片化。这意味着在将 PK 索引从非集群更改为集群之前,我可能应该等待一段时间。

我的问题是,有人有这方面的经验吗?有什么我忽略的事情需要注意吗?

0 投票
2 回答
1701 浏览

sql-server - Sequential Guid 主键列应该是聚集索引吗?

使用顺序 guid 的目的是让您可以使用聚集索引,而不会出现聚集索引中通常存在的高级别碎片,如果它是常规 guid,对吗?

0 投票
2 回答
1198 浏览

sql-server-2008 - 如何使用 SSIS 导入数据以获取顺序指南?

无论如何将数据导入SSIS,我希望PKs是顺序指导?

到目前为止,我能想出的唯一方法是创建一个临时表,该列默认newsequentialid()将数据加载到那里,然后将其复制到正确的表中。这不是很优雅,并且不得不在我的包中添加一堆额外的层来适应它有点费时。

0 投票
1 回答
2188 浏览

sql-server - 将 NEWSEQUENTIALID() 与 UPDATE 触发器一起使用

我正在向我的表中添加一个新的 GUID/Uniqueidentifier 列。

当表中的记录更新时,我想更新此列“VersionNumber”。所以我创建了一个新的触发器

但刚刚意识到 NEWSEQUENTIALID() 只能与CREATE TABLEor一起使用ALTER TABLE。我收到了这个错误

有解决方法吗?

Edit1:在触发器中更改NEWSEQUENTIALID()NEWID()解决了这个问题,但我正在索引此列并且使用NEWID()将是次优的

0 投票
3 回答
173 浏览

sql - 在提供或不提供 PK 时让 SQL Insert 工作

我有以下存储过程:

ServerEnvironmentId 列是一个主键,上面设置了默认值,即 (newsequentialid())。

我需要这个存储过程来处理 2 个场景:

  1. 为 ServerEnvironmentId 提供的值 - 有效。
  2. 未为 ServerEnvironmentId 提供值 - 不起作用 - 无法插入空值。我认为通过在此列上设置默认值就可以了。

请有人帮助修改此程序,使其适用于这两种情况。解决方案需要进行最小的更改,因为所有 sp 目前都遵循这一趋势。

0 投票
3 回答
146 浏览

sql-server - 简化使用 NEWSEQUNETIALID() 列默认值的 SQL 插入

我有以下插入存储过程:

我可以将上面的内容简化为:

但是通过这样做,我失去了不能在代码中设置newsequentialid()over的性能改进,它只能作为表列级别的默认值提供。newid(). newsequentialid()newid()

任何关于简化原始查询但利用的想法newsequentialid()?或者,原始查询是实现这一目标的最简化的解决方案吗?

0 投票
3 回答
8462 浏览

c# - EF 中的 GUID COMB 策略

有没有办法使用 CodeFirst 设计为新实体框架 4.1 中的对象实现 Guid COMB 标识策略?我认为设置StoreGeneratedPattern会起作用,但它仍然给了我正常的 GUID。

0 投票
1 回答
1665 浏览

sql-server - UniqueIdentifier 聚集索引上的 NewSequentialId

我正在为我的公司正在启动的新数据库制定数据库标准。我们试图定义的一件事是与唯一标识符相关的主键和聚集索引规则。

(注意:我不想讨论使用 UniqueIdentifier 作为主键或聚集索引的利弊。网上有大量关于此的信息。这不是讨论。)

所以这是让我担心的场景:

假设我有一个以 UniqueIdentifier 作为聚集索引和主键的表。让我们称之为ColA。我将 ColA 的默认值设置为 NewSequentialId()。

使用该 NewSequentialId() 我插入三个连续的行:

{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3-440D-A9FE-CC7988DDF067}

然后我重新启动我的服务器。NewSequentialId的文档说“重新启动 Windows 后,GUID 可以从较低的范围重新开始,但仍然是全局唯一的。”

所以下一个起点可以低于上一个范围。

所以重新启动后,我再插入 3 个值:

{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-4645-ABA9-B098D2003E66}

(我不确定该 guid 在数据库中的确切表示方式,但假设因为这个以 3 开头,而前一个以 7 开头,所以 3 个比 7 个“小”。)

当您在聚集索引的中间进行插入时,必须重新映射索引。(至少我的 DBA 是这样告诉我的。)每次重新启动时,我都会冒着让我的新 UniqueIdentifier 范围正好位于其他先前范围中间的风险。

所以我的问题是:由于下一组 UniqueIdentifiers 将小于上一组,每次插入都会导致我的聚集索引洗牌吗?

如果不是,为什么?SQL Server 是否知道我正在使用 NewSequentialId?它有什么办法弥补吗?

如果不是,那么它怎么知道我接下来要插入什么?也许接下来的一百万个插入将从 3 开始。或者他们将从 7 开始。它怎么知道?

还是它不知道,只是保持一切井井有条。如果是这种情况,那么一次重新启动可能会极大地影响性能。(这让我觉得我需要自己的不受重启影响的自定义 NewSequentialId。)对吗?还是有一些我不知道的魔法?

编辑:在我的标准中强烈建议不要将 GUID 作为聚集索引。正如我上面所说,有很多原因表明这是一个坏主意。我试图找出这是否是另一个原因。

0 投票
2 回答
1223 浏览

sql-server-2008-r2 - 在存储过程(SQL Server 2008 R2 SP2)中,是否可以在没有临时表变量的情况下返回 NewSequentialID()?

在存储过程中(使用 SQL Server 2008 R2 SP2)是否可以在NewSequentialID()没有临时表变量的情况下返回 a?

NewSequentialID()我可以通过使用临时表成功获得:

在插入时获取 NEWSEQUENTIALID() 的值

也许我是老派,但除非绝对必要,否则我尽量避免使用临时表……尽管这可能是绝对必要的情况……</p>

如果我尝试:

......它按预期工作。

如果我尝试:

…我收到以下错误:

newsequentialid() 内置函数只能用于 CREATE TABLE 或 ALTER TABLE 语句中类型为“uniqueidentifier”的列的 DEFAULT 表达式。它不能与其他运算符组合形成复杂的标量表达式。

  • 是使用临时表方法的唯一解决方案吗?
  • 有谁知道微软为什么在NEWSEQUENTIALID()to work like之间实现区别的原因NEWID()
  • 任何人都知道微软是否有机会更新NEWSEQUENTIALID()为像这样工作NEWID()

地理

更新——我不确定微软为什么选择以这种方式实现该方法,因为他们声明“NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器”......但似乎没有非临时变量表法。(至少到目前为止。)
感谢大家的评论/回答。[主持人注意:]当答案是“不可能”时,我不确定如何处理问题。所以我要感谢@marc_s 详细介绍了一种解决方法。

0 投票
1 回答
5895 浏览

c# - 实体框架 5 代码首先将 newsequentialid() 作为 PK

如何newsequentialid()在 PK 列中用作默认值?

我有这个注释:

但这会生成随机的 guid,我希望有顺序的 guid。

我可以手动将数据库设置newsequentialid()为默认值,但没有更好的选择吗?还是 EF 团队忘记了这个选项?