18

我是 SQL Server 2008 的初学者。表中有一个列,例如StudentID. StudentID将是表的 pk,它只能是整数,而且会是一个巨大的数字。

我的问题是 SQL Server 2008 中 StudentID 列的最佳类型是什么?

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

多谢。

4

3 回答 3

39

您使用以下属性定义类型INT(或SMALLINT, TINYINT, BIGINT)的列:IDENTITY

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

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

使用 type INT,从 1 开始,您可以获得超过 20 亿行可能的行——这对于绝大多数情况来说应该绰绰有余。有了BIGINT,你得到大约922 万亿(922 有 15 个零 - 922'0000 亿) - 对你来说足够了吗?

如果您使用INT IDENTITY从 1 开始,并且每秒插入一行,则需要 66.5才能达到 20 亿的限制……(所以在我看来,这对于绝大多数情况来说已经绰绰有余了!)

如果您使用BIGINT IDENTITY从 1 开始的 a,并且每秒插入 1000 行,那么在达到 922 万亿极限之前,您需要令人难以置信的2.92 亿年......

INT使用 4 个字节的存储空间,而BIGINT使用 8 个字节。尤其是如果您处理大量行和许多非聚集索引,您希望将其保持尽可能小- 这是我通常选择作为我的“ID”类型的另一个原因INT(除非我有一个非常强大的表明这INT还不够……)

在MSDN 联机丛书中阅读有关它的更多信息(包括所有选项)。

于 2012-06-27T09:19:12.980 回答
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
 )
)

希望这有助于您的问题对我有所帮助。

于 2014-08-11T14:55:58.917 回答
1

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

于 2019-10-31T00:29:02.053 回答