SQL Server 2008中ID列的最佳类型是什么?

19

我是 SQL Server 2008 的初学者,我的表格里有一个叫做 StudentID 的列。

StudentID 是这个表的主键,只能是整数类型,且它的值将会非常大。

我的问题是,在 SQL Server 2008 中,哪种类型最适合作为 StudentID 列的数据类型?

bigint? numeric(18,0)? 还是其他类型?

非常感谢。

3个回答

43

你可以使用 IDENTITY 属性来定义一个类型为 INT (或 SMALLINT,TINYINT,BIGINT)的列:

CREATE TABLE dbo.YourTable( ID INT IDENTITY(1,1) ......

使用此设置,当将行插入表中时,SQL Server会自动为该表生成连续的ID。

使用INT类型,从1开始,您可以获得超过20亿个可能的行——这应该足够满足绝大多数情况了。使用BIGINT,您可以获得约922千万亿(15个零的922亿亿)-这对您来说足够了吗?

如果使用以1为起始值的INT IDENTITY,并且您每秒插入一行,则需要66.5才能达到20亿限制... (所以,在我看来,这对于绝大多数情况来说是足够多的!)

如果使用以1为起始值的BIGINT IDENTITY,并且每秒插入1000行,则需要一个令人难以置信的292亿年才能达到922千万亿的限制...

INT使用4字节存储空间,而BIGINT使用8字节。特别是当处理大量行和许多非聚集索引时,您希望将其尽可能小-这是为什么我通常选择INT作为我的“ID”类型的另一个原因(除非我有很强的迹象表明INT不够用...)

MSDN Books Online中阅读更多信息(包括所有可用选项)。


您好,感谢您在更广泛的层面上改变了开发CMS级应用程序的视角。 - Vipertecpro
1
如果您将数据类型的标识种子设置为最低负数,则可以将列中可存储的值总数翻倍。 - ESS

1
是的,int或其任何变体都是一个不错的选择,但我能想到一个缺点。当行被删除时,ID字段显示缺失数字,如(1,3,4,5)。Guid可以作为ID字段的第二选择。

1

Int是SQL Server表中Id列的最佳类型

如果表最终有太多记录,我们可以更改为BigInt

我们还可以将Id创建为表的Identity和/或PK。

CREATE TABLE [dbo].[TableName](
    [TableNameId] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

身份和主键示例

CREATE TABLE [dbo].[TableName3](
    [TableName3Id] [int] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PK_TableName3] PRIMARY KEY CLUSTERED 
 (
    [TableName3Id] ASC
 )
)

希望这能回答你的问题,它帮助了我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接