问题标签 [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 投票
0 回答
313 浏览

entity-framework-5 - 当 ID 是带有 newsequentialid() 的 Guid 时,使用 Entity Framework 5.0 映射父子关系

我有两个具有一对多关系的类。

映射类是:

我可以创建客户端类的新实例并将它们成功保存到数据库中。但是,当我尝试添加 Client_Local 类并将其保存到数据库时,我得到“ReferentialConstraint 中的依赖属性映射到存储生成的列。列:'Guid'。”。

出于性能原因,关键字段在 sql 中生成为 newsequentialid。并且Client_Local.Guid和Client.Guid之间存在外键关系。

从数据库中检索数据使用上述映射类。任何帮助将不胜感激。

0 投票
2 回答
4942 浏览

sql - newid() 与实体框架 6 代码优先

我想通过 Entity Framework 6 Code First 使用 newid() 设置 SQL 数据库中表的主键的默认值。我知道这是如何通过代码完成的,并且还在 stackoverflow 上找到了一些方法,例如How to set NewId() for GUID in entity framework

但是:我有一个备份/恢复机制,它不是通过对象插入数据,而是作为数据库的一个凸起插入数据。所以这里没有使用实体框架。这意味着将在 SQL 数据库中插入以 null 作为 guid 的行并失败。

可以添加注释

这将成功添加 NEWSEQUENTIALID() 作为默认值,它与 newid() 执行类似的操作(它添加了一个高于最近 guid 的新 guid,因此您赢得了性能,因为您在输入中有订单)。但是因为这是一个已经存在而没有 EF 的数据库,所以我想尽可能少地进行更改。所以我对 NEWSEQUENTIALID() 并不十分满意。如果它仍然只是 newid(),我宁愿喜欢它。但是我在 Entity Framework 6 Code First 中没有找到 newid() 的任何注释/映射。根据设计,对数据库的所有更改都必须通过代码完成。有谁知道如何通过代码将默认值 newid() 添加到行中?

提前致谢!

0 投票
1 回答
1398 浏览

sql-server - 为什么使用 NEWID() 比 NEWSEQUENTIALID() 使用更多空间?

我正在做一些研究,我遇到了一个我无法解释的异常情况(而且我在谷歌上找不到任何东西)。考虑以下 SQL:

结果:

问题

谁能解释为什么在使用 NEWSEQUENTIALID() 而不是 NEWID() 时保留/实际空间要小得多?

作为回应

我进行了以下测试以检查 Luaan 在下面给出的答案:

不同之处在于我删除了主键(这意味着该表现在是一个堆表)。现在这导致两个表的大小完全相同。这证明了该表是由其聚集索引物理组织的。

0 投票
4 回答
1653 浏览

sql - NEWSEQUENTIALID 的可预测性如何?

根据微软关于 的文档NEWSEQUENTIALID,NEWSEQUENTIALID 的输出是可以预测的。但是可预测性如何?假设我有一个由 生成的 GUID,NEWSEQUENTIALID它有多难:

  • 计算下一个值?
  • 计算前一个值?
  • 计算第一个值?
  • 计算第一个值,即使根本不知道任何 GUID?
  • 计算行数?例如,当使用整数时,/order?id=842告诉我应用程序中有 842 个订单。

下面是一些关于我在做什么以及各种权衡是什么的背景信息。

使用 GUID 而非整数作为主键的安全优势之一是 GUID 很难猜测。例如,黑客看到一个/user?id=845他可能会尝试访问的 URL /user?id=0,因为数据库中的第一个用户很可能是管理用户。此外,黑客可以迭代/user?id=0..1..2以快速收集所有用户。

同样,整数的隐私缺点是它们会泄露信息。/order?id=482告诉我,该网店自实施以来已收到 482 个订单。

不幸的是,使用 GUID 作为主键具有众所周知的性能缺点。为此,SQL Server 引入了该NEWSEQUENTIALID功能。在这个问题中,我想了解输出的可预测性NEWSEQUENTIALID

0 投票
3 回答
3578 浏览

newsequentialid - 表已创建并有数据后如何使用 NEWSEQUENTIALID()?

任何人都可以帮我解决这个问题。我有一张不唯一的表(因为我正在翻阅我前任的旧数据库。)

我想将它分配给我拥有的 Fruits 表中的“ID”字段。

我想继续设置 NEWSEQUENTIALID(),这样我就可以看到我正在使用的所有内容。

0 投票
1 回答
145 浏览

sql-server - 在 SQL Server 的多对多关系中使用顺序 GUID

基于“什么是使用 GUID 作为主键的最佳实践,特别是关于性能? ”问题,恕我直言,如果您使用顺序 GUID 作为具有非聚集索引的 PK 并使用INTorBIG INT IDENTITY作为聚集索引并考虑到应用程序可能稍后需要复制,这将是有益的,并且不会在表扫描、内部连接和插入中损失太多性能。

但是可能对许多关系呢?我们是否还应该为其桥接表使用不同的(INTBIGINT)聚集索引来获得与带有 FK 的桥接表相同的性能BIGINT

0 投票
2 回答
1422 浏览

c# - Guid 为空,首先使用 newsequentialid() 和 EF 数据库

我首先在使用 EF 4.1 和数据库的网站上工作。我也在使用 aspnet 表,特别aspnet_Users是使用 Guid 作为主键的表。aspnet_Users因此,我的自定义 User 表也有一个 Guid 作为主键,它是id的外键。

最近,我读到使用 Guid 作为主键是一个坏主意,除非使用newsequentialid().

使用 Sql Server Management Studio,我已将所有主键的默认值更新为newsequentialid(),并在我的 edmx 设计器中设置StoreGeneratedPattern为。Identity

但是,每当我尝试添加一个对象(例如Item,它有一个 Guid 主键)时,它的 id 在数据库中保持为空(全为 0)。

和添加方法:

我是不是忘记了什么?尽管我为数据库的主键设置了默认值,但它们Default Value在 edmx 设计器中的属性仍然是None. 正常吗?

另一种解决方案是使用 int 而不是 Guid 作为主键,但是我怎样才能在我的自定义 User 表和aspnet_Users使用 Guid 之间建立链接?

非常感谢 !

0 投票
3 回答
7043 浏览

c# - 如何在 C# 中对顺序 GUID 进行排序?

顺序 GUID 是唯一的,但是是按顺序创建的;该顺序有点不寻常,并且与使用标准 .NET Guid 比较器时获得的顺序不同。

我正在寻找一个 C# Guid 比较器,它将按顺序 GUID 的规则进行排序。

== 更新==

我特别指的是 SQL Server 中由 NewSequentialId() 创建的顺序 GUID,尽管我现在意识到标准 Win32 API 调用 UuidCreateSequential() 使用与 SQL Server 不同的方案(我在写问题时假设它们是相同的) .

== 更新 2==

petelids给出了下面的答案,使用例如 List<System.Data.SqlGuid>.Sort() 给出以下序列(使用每个 4 位位置为 1 的 GUID 的初始列表)...

与 List<System.Guid>.Sort() 返回的以下顺序相反

0 投票
1 回答
191 浏览

sql-server - 由于 Newsequentialid 导致的 SQL 新列错误

嗨,我有一个非常大的数据,它有一个作为 ObjectID 的列,它的默认值是 newsequentialid()。当我尝试在该表上创建具有默认值的新列时,我收到此消息“验证列 'ObjectID' 的默认值时出错”。

如果我对该对话消息说“是”,会发生什么?我不想影响我们现有的数据。

你能解释一下这种情况吗?

感谢和问候

0 投票
2 回答
373 浏览

sql-server - 跨服务器的集群 GUID 列和 newsequentialid

众所周知,在具有聚集索引的列中使用随机值并不是一个好主意,这就是为什么通常不建议将 GUID 用于具有聚集索引的主键的原因。使用 newsequentialid() 函数,我们可以克服大部分困难。

但是,如果您在 Web 服务器场上生成 GUID,所有这些都访问同一个数据库,会发生什么情况?我正在使用 UuidCreateSequential 在 .NET 代码中创建顺序 ID,如本文所述:http: //blogs.msdn.com/b/dbrowne/archive/2012/07/03/how-to-generate-sequential-guids-for -sql-server-in-net.aspx

问题是,虽然生成的 GUID 从单台机器上是连续的,但在多台机器上却不是这样。因为最重要的 11 个字节(根据 SQL Server)似乎对于同一台机器几乎保持不变,所以它有效地按机器排序,然后按时间排序,而不是期望的相反。

重新排序 GUID 中的字节以在机器之间获得近乎顺序的 GUID 是否值得且可行,还是我应该放弃并使索引不聚集?

谢谢!