Entity Framework 中的 Sequence 是否比 Identity 快?
Is Sequence faster than Identity in Entity Framework?
我听说在 Sql 服务器中 Sequence 比 Identity 快。但是,我认为在 Entity Framework 中使用它不是一个好主意。因为,要在 Entity Framework 中使用序列,您应该进行额外调用以获取下一个序列。
int sequence = context.Database.SqlQuery<int>("SELECT NEXT VALUE FOR MySequenceName").FirstOrDefault();
因此,我认为在Entity Framework中使用Sequence会比较慢。我对吗?有人知道吗?
是的,序列比身份更快,因为您是从内存中而不是从光盘中获取序列。
它们可以在您想要的任何情况下使用,但我认为它们真正的力量在于:
- 插入前获取密钥
- 使用同一序列中的唯一键
在多个表中
如果您不需要这些点,那么我将只使用身份、一次调用数据库、一次事务。
在 entity framework 中使用它,正如您所说,您需要额外调用才能获取密钥,但这并不能真正发挥作用。
不一定(您需要多个数据库调用),您可以将 EF 与存储过程结合使用,并将从序列和插入的 ID 检索逻辑放在存储过程中。这可以简化和抽象 ID 的检索和分配,因此您不必将其编写为 C# 代码的一部分。
如果您想保持简单,请仅在您认为速度至关重要的地方使用 Sequence,而不使用 Sequence 会影响 Sql 语句的性能。例如,在您希望执行大量批量插入或希望预先确定 id 以更简化插入多个表的表上。您可以继续使用 Identity 的所有其他表。
另请参阅之前的 SO answer,其中介绍了如何在您的 EF 代码中使用 Sequence,这几乎是您在问题中已有的内容,但包含了其余的 c# 代码。
I heard that Sequence is faster than Identity in Sql Server.
我上次检查时,正好相反:Sequence and Identity Performance。当然,这种情况可以(并且可能会)在下一个 SQL 服务器版本中改变,但现在 - 你没听错。
关于 "extra call" - 您认为 scope_identity()
的结果不会出现在您的应用程序中,对吧?
我听说在 Sql 服务器中 Sequence 比 Identity 快。但是,我认为在 Entity Framework 中使用它不是一个好主意。因为,要在 Entity Framework 中使用序列,您应该进行额外调用以获取下一个序列。
int sequence = context.Database.SqlQuery<int>("SELECT NEXT VALUE FOR MySequenceName").FirstOrDefault();
因此,我认为在Entity Framework中使用Sequence会比较慢。我对吗?有人知道吗?
是的,序列比身份更快,因为您是从内存中而不是从光盘中获取序列。
它们可以在您想要的任何情况下使用,但我认为它们真正的力量在于:
- 插入前获取密钥
- 使用同一序列中的唯一键 在多个表中
如果您不需要这些点,那么我将只使用身份、一次调用数据库、一次事务。 在 entity framework 中使用它,正如您所说,您需要额外调用才能获取密钥,但这并不能真正发挥作用。
不一定(您需要多个数据库调用),您可以将 EF 与存储过程结合使用,并将从序列和插入的 ID 检索逻辑放在存储过程中。这可以简化和抽象 ID 的检索和分配,因此您不必将其编写为 C# 代码的一部分。
如果您想保持简单,请仅在您认为速度至关重要的地方使用 Sequence,而不使用 Sequence 会影响 Sql 语句的性能。例如,在您希望执行大量批量插入或希望预先确定 id 以更简化插入多个表的表上。您可以继续使用 Identity 的所有其他表。
另请参阅之前的 SO answer,其中介绍了如何在您的 EF 代码中使用 Sequence,这几乎是您在问题中已有的内容,但包含了其余的 c# 代码。
I heard that Sequence is faster than Identity in Sql Server.
我上次检查时,正好相反:Sequence and Identity Performance。当然,这种情况可以(并且可能会)在下一个 SQL 服务器版本中改变,但现在 - 你没听错。
关于 "extra call" - 您认为 scope_identity()
的结果不会出现在您的应用程序中,对吧?