Меня попросили выполнить тест производительности с использованием SQL Server 2008. В рамках этого я сравниваю скорость столбцов IDENTITY как PK, используя INT и BIGINT. У меня есть простая процедура для создания 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.
Может ли кто-нибудь еще воссоздать, опровергнуть, подтвердить или оспорить результаты или указать, если я что-то пропустил?