gpt4 book ai didi

sql-server - 意外的性能结果将ID列的INT与BIGINT进行比较

转载 作者:行者123 更新时间:2023-12-03 03:29:37 25 4
gpt4 key购买 nike

我被要求使用SQL Server 2008执行性能测试。在此过程中,我正在比较使用INT和BIGINT将IDENTITY列作为PK的速度。我有一个简单的例程,可以为每种类型创建100,000行,并确定插入速度。该脚本如下所示:

SET NOCOUNT ON

CREATE TABLE TestData
(
PK INT IDENTITY PRIMARY KEY,
Dummy INT
)

DECLARE @Rows INT
DECLARE @Start DATETIME

SET @Rows = 100000
SET @Start = GETDATE()

WHILE @Rows > 0
BEGIN
INSERT INTO TestData (Dummy) VALUES (@Rows)
SET @Rows = @Rows - 1
END

SELECT @Start, GETDATE(), DATEDIFF(MS, @Start, GETDATE())

DROP TABLE TestData


为了测试BIGINT身份,我使用了一个稍作修改的版本:

SET NOCOUNT ON

CREATE TABLE TestData
(
PK BIGINT IDENTITY PRIMARY KEY,
Dummy INT
)

DECLARE @Rows INT
DECLARE @Start DATETIME

SET @Rows = 100000
SET @Start = GETDATE()

WHILE @Rows > 0
BEGIN
INSERT INTO TestData (Dummy) VALUES (@Rows)
SET @Rows = @Rows - 1
END

SELECT @Start, GETDATE(), DATEDIFF(MS, @Start, GETDATE())

DROP TABLE TestData


令我惊讶的是,BIGINT版本的运行速度明显比INT版本快。我的测试套件上的INT版本大约需要30秒,BIGINT大约需要25秒。授予测试套件具有64位处理器。但是,它正在运行32位Windows和32位SQL Server 2008。

其他任何人都可以重新创建,拒绝,确认或质疑结果,或者指出我是否错过了什么吗?

最佳答案

要更进一步,请对VARCHAR做同样的事情,例如:

SET NOCOUNT ON

CREATE TABLE TestData
(
PK VARCHAR(8) PRIMARY KEY,
Dummy INT
)

DECLARE @Rows INT
DECLARE @Start DATETIME

SET @Rows = 100000
SET @Start = GETDATE()

WHILE @Rows > 0
BEGIN
INSERT INTO TestData (PK, Dummy) VALUES (CONVERT(VARCHAR(8), @Rows), @Rows)
SET @Rows = @Rows - 1
END

SELECT @Start, GETDATE(), DATEDIFF(MS, @Start, GETDATE())

DROP TABLE TestData


我希望这会慢很多,因为脚本正在确定“身份”列,并且存在字符串转换。另外,我制作了VARCHAR(8)以使用bigint匹配字节数。但是,在我的测试中,它的运行速度比上面的INT测试快。

我从中得到的是,无论您对表进行什么操作,将记录插入到空表中都将很快。未来性能的影响,即表上的其他索引,表已经有大量数据时插入行等,可能是更重要的考虑因素。

关于sql-server - 意外的性能结果将ID列的INT与BIGINT进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/763773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com