问题标签 [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.
sql - 在现有表上将 newid() 更改为 newsequentialid()
目前,我们有许多在主键上使用 newid() 的表。这导致了大量的碎片。因此,我想将列更改为使用 newsequentialid() 。
我想现有数据将保持相当碎片化,但新数据将不那么碎片化。这意味着在将 PK 索引从非集群更改为集群之前,我可能应该等待一段时间。
我的问题是,有人有这方面的经验吗?有什么我忽略的事情需要注意吗?
sql-server - Sequential Guid 主键列应该是聚集索引吗?
使用顺序 guid 的目的是让您可以使用聚集索引,而不会出现聚集索引中通常存在的高级别碎片,如果它是常规 guid,对吗?
sql-server-2008 - 如何使用 SSIS 导入数据以获取顺序指南?
无论如何将数据导入SSIS,我希望PKs是顺序指导?
到目前为止,我能想出的唯一方法是创建一个临时表,该列默认newsequentialid()
将数据加载到那里,然后将其复制到正确的表中。这不是很优雅,并且不得不在我的包中添加一堆额外的层来适应它有点费时。
sql-server - 将 NEWSEQUENTIALID() 与 UPDATE 触发器一起使用
我正在向我的表中添加一个新的 GUID/Uniqueidentifier 列。
当表中的记录更新时,我想更新此列“VersionNumber”。所以我创建了一个新的触发器
但刚刚意识到 NEWSEQUENTIALID() 只能与CREATE TABLE
or一起使用ALTER TABLE
。我收到了这个错误
有解决方法吗?
Edit1:在触发器中更改NEWSEQUENTIALID()
为NEWID()
解决了这个问题,但我正在索引此列并且使用NEWID()
将是次优的
sql - 在提供或不提供 PK 时让 SQL Insert 工作
我有以下存储过程:
ServerEnvironmentId 列是一个主键,上面设置了默认值,即 (newsequentialid())。
我需要这个存储过程来处理 2 个场景:
- 为 ServerEnvironmentId 提供的值 - 有效。
- 未为 ServerEnvironmentId 提供值 - 不起作用 - 无法插入空值。我认为通过在此列上设置默认值就可以了。
请有人帮助修改此程序,使其适用于这两种情况。解决方案需要进行最小的更改,因为所有 sp 目前都遵循这一趋势。
sql-server - 简化使用 NEWSEQUNETIALID() 列默认值的 SQL 插入
我有以下插入存储过程:
我可以将上面的内容简化为:
但是通过这样做,我失去了不能在代码中设置newsequentialid()
over的性能改进,它只能作为表列级别的默认值提供。newid().
newsequentialid()
newid()
任何关于简化原始查询但利用的想法newsequentialid()
?或者,原始查询是实现这一目标的最简化的解决方案吗?
c# - EF 中的 GUID COMB 策略
有没有办法使用 CodeFirst 设计为新实体框架 4.1 中的对象实现 Guid COMB 标识策略?我认为设置StoreGeneratedPattern
会起作用,但它仍然给了我正常的 GUID。
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 作为聚集索引。正如我上面所说,有很多原因表明这是一个坏主意。我试图找出这是否是另一个原因。
sql-server-2008-r2 - 在存储过程(SQL Server 2008 R2 SP2)中,是否可以在没有临时表变量的情况下返回 NewSequentialID()?
在存储过程中(使用 SQL Server 2008 R2 SP2)是否可以在NewSequentialID()
没有临时表变量的情况下返回 a?
NewSequentialID()
我可以通过使用临时表成功获得:
也许我是老派,但除非绝对必要,否则我尽量避免使用临时表……尽管这可能是绝对必要的情况……</p>
如果我尝试:
......它按预期工作。
如果我尝试:
…我收到以下错误:
newsequentialid() 内置函数只能用于 CREATE TABLE 或 ALTER TABLE 语句中类型为“uniqueidentifier”的列的 DEFAULT 表达式。它不能与其他运算符组合形成复杂的标量表达式。
- 是使用临时表方法的唯一解决方案吗?
- 有谁知道微软为什么在
NEWSEQUENTIALID()
to work like之间实现区别的原因NEWID()
? - 任何人都知道微软是否有机会更新
NEWSEQUENTIALID()
为像这样工作NEWID()
?
地理
更新——我不确定微软为什么选择以这种方式实现该方法,因为他们声明“NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器”......但似乎没有非临时变量表法。(至少到目前为止。)
感谢大家的评论/回答。[主持人注意:]当答案是“不可能”时,我不确定如何处理问题。所以我要感谢@marc_s 详细介绍了一种解决方法。
c# - 实体框架 5 代码首先将 newsequentialid() 作为 PK
如何newsequentialid()
在 PK 列中用作默认值?
我有这个注释:
但这会生成随机的 guid,我希望有顺序的 guid。
我可以手动将数据库设置newsequentialid()
为默认值,但没有更好的选择吗?还是 EF 团队忘记了这个选项?