我是 SQL Server 2008 的初学者。表中有一个列,例如StudentID
.
StudentID
将是表的 pk,它只能是整数,而且会是一个巨大的数字。
我的问题是 SQL Server 2008 中 StudentID 列的最佳类型是什么?
bigint
?
numeric(18,0)
? 还是其他人?
多谢。
我是 SQL Server 2008 的初学者。表中有一个列,例如StudentID
.
StudentID
将是表的 pk,它只能是整数,而且会是一个巨大的数字。
我的问题是 SQL Server 2008 中 StudentID 列的最佳类型是什么?
bigint
?
numeric(18,0)
? 还是其他人?
多谢。
您使用以下属性定义类型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 联机丛书中阅读有关它的更多信息(包括所有选项)。
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
)
)
希望这有助于您的问题对我有所帮助。
是的,int 或 int 的任何变体都是不错的选择,但我能想到它有一个缺点。当行被删除时,ID 字段会显示缺失的数字,例如 (1,3,4,5)。Guid 可能是 ID 字段的第二选择