SQL主键
因此,我和一位同事正在争论哪种方式更适合生成GUID的主键。
我们使用带有实体4的.NET 4.0并使用存储过程来进行选择/插入/更新。
他希望在代码中创建GUID主键,并使用Guid类或/和使用一些创建的Sequential GUID类将其作为插入的一部分传回。
我希望使用newid()或newsequentialid()在插入时由SQL Server创建GUID。
我反对他的方式的论点是,如果你必须进行多次插入,你必须进行往返以获得每个插入的guid,以便为外键约束维护该关系。另外,使用这种方式,您必须为每个插入物进行几次往返。
他关于使用SQL做的论点是,在插入发生之前他无法访问密钥,并且必须等待插入才能使主键guid重新用于代码的其他部分。这样,您可以与存储过程建立一个连接,并处理所有插入。
那么,哪种方法更适合单个插入?哪种方法更适合事务中的多个插入?
没有找到相关结果
已邀请:
2 个回复
炬卤遁蝎变
- 但即使这样也不是真正的,完全顺序的,因此也会遇到与GUID相同的问题 - 只是不那么突出。如果你坚持GUID,那么至少在服务器上使用
方法! 然后还有另一个需要考虑的问题:表格上的聚类键也会添加到表格中每个非聚集索引的每个条目上 - 因此您确实希望确保它尽可能小。通常,对于绝大多数表来说,具有2亿行的INT应该足够 - 并且与作为群集密钥的GUID相比,您可以在磁盘和服务器内存中节省数百兆的存储空间。 快速计算 - 使用INT与GUID作为主要和群集密钥: 基表有1'000'000行(3.8 MB对15.26 MB) 6个非聚簇索引(22.89 MB对91.55 MB) 总计:25 MB对106 MB - 这只是在一张桌子上! 还有一些值得深思的东西 - 金佰利特里普的优秀作品 - 阅读,再读一遍,消化它!这是SQL Server索引福音,真的。 GUID为PRIMARY KEY和/或群集密钥 聚集指数的争论仍在继续 不断增加的聚类密钥 - 聚集索引辩论..........再次! 磁盘空间很便宜 - 这不是重点! 渣
瞧叮