为什么aspnet_users使用guid作为id而不是递增int?
还有什么理由不在其他表中使用它作为主键?感觉有点奇怪,因为我知道我以前使用的大多数应用程序只使用普通的int系统.
我也将开始使用此id来匹配扩展的详细信息表以获取额外的用户prefs等.我还在考虑使用带有guid和int的链接表,但我决定,因为我不认为我实际上需要将用户ID作为public int.
虽然我想有int(感觉更容易做用户查找等stackoverflow.com/users/12345/user-name),因为我只是要有用户名,我不认为我需要携带这个当我需要找到一个用户int时,周围的项目并且会增加查找的额外复杂性.
感谢您对此任何帮助.
我已经阅读了这里的各种问题/答案,基本上表明,由于性能原因,在uniqueidentifier列上使用聚簇索引是一个糟糕的选择.无论如何,我需要使用uniqueidentifier作为我的主键,我不想使用newsequentialid(),因为生成的值彼此太相似(我需要更多随机ID,因此用户无法[合理地]'猜测'另一个ID).
那么,这个PK索引的最佳方法是什么?即使此列上的聚簇索引不理想,它是否优于"唯一的非聚集"索引?
我正在使用SQL Server 2005.
我有一个拥有3000万行的数据库.PK聚集索引是生成的代码GUID
.
表格如下:
CREATE TABLE [dbo].[events](
[imageEventGUID] [uniqueidentifier] NOT NULL,
[imageSHAID] [nvarchar](256) NOT NULL,
[queryGUID] [uniqueidentifier] NOT NULL,
[eventType] [int] NOT NULL,
[eventValue] [nvarchar](2050) NULL,
[dateOfEvent] [datetime] NOT NULL,
CONSTRAINT [PK_store_image_event] PRIMARY KEY CLUSTERED
(
[imageEventGUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
简单地说它是一个图像搜索引擎.
imageEventGUID
是代码唯一标识符, imageSHAID
是图像URL的SHA256queryGUID
是生成FK的代码(为简洁起见,从create语句中排除)eventType
是一个分配给它是什么类型的事件的数字eventValue
通常是图像的URI,例如" http://mywebpage.com/images/image123456789.jpg "我定期使用非常标准的代码将via SqlBulkCopy
(从a DataTable
)插入到此表中:
using (SqlBulkCopy …
Run Code Online (Sandbox Code Playgroud)