在 nHibernate 中使用 GUID 而不是整数标识作为表主键会有什么开销?
使用的主要原因是在面向用户的数据上混淆了表 ID。
在 nHibernate 中使用 GUID 而不是整数标识作为表主键会有什么开销?
使用的主要原因是在面向用户的数据上混淆了表 ID。
对GetById、查找前 50 个过滤记录、Delete、Update ...等操作的日常级别的影响为零。根本没有可测量的差异。
影响很大的是数据库存储。整数存储在 4 个字节中,Guid 消耗 16 个字节。因此,每百万行您将需要多 12 MB 的存储空间。如果此类实体引用其他实体,则每个引用的表需要另外 12 MB。当这些列用于索引时......空间可能会越来越大。
因此,在更大的范围内,SQL Server 将不得不扫描更大的数据。例如,MS SQL Server 确实针对 int 类型进行了优化。(包括 bigint、shortint、tinyint)。
但是,老实说,我们同时使用了这两种方法,而性能问题总是在其他地方......
如果可能的话,我每次都会根据 int投票给主键。
而是稍后将 MVC 路由从 controller\action\id 更改为其他内容,但保持 ids int。您可以将 GUID 作为属性引入(占用一些空间,但仅占用一些空间,而不是在引用的表中)并将路由更改为controller\actin\uniqueGuid,如果确实需要混淆用户,您将在业务层上调用 GetByGuid。