我正在 Visual Studio 2010 中开发一个 ASP.NET 网站(带有 Service Pack 1,非常感谢)。我想为 SQL Server 2008 使用 .NET 的内置成员资格和角色提供程序。
现在,我已经开发 Microsoft 技术很长时间了,并且与业内一些最优秀的 SQL Server DBA 擦肩而过。他们每个人都告诉我在构建数据库表时远离GUIDS 作为主键:
- 拥有非常高的记录数。
- 有大量的插入和删除。
原因:因为主键是聚集索引!
这基本上意味着插入到表中的每条记录都必须遵守索引的约束。因此,如果索引按 ASC 排序,则具有新生成的 GUID 的记录必须以适当的顺序物理楔入相关数据表中。
这对于只有几千条记录左右的表来说就很好了。SQL Server 只需要重新定位一小部分。但是,如果数据表有几百万条记录,并且发现它必须在第 216 行插入新记录。这可能需要大量时间(按 Web 标准)才能完成。它必须物理地将所有这些行向下移动,以插入新行。
所以我的问题就是这个。既然 Microsoft 以及我们所知道和喜爱的所有 DBS 都拒绝将 GUID 作为主键......为什么 ASPNET_REGSQL 工具使用 GUID 作为主键来创建表?
还是我错过了什么?2008 年的 SQL Profiler 引擎是否有一项新功能不再将 GUIDS 视为一项任务?