Dans SQL Server, j'essaie de faire une analyse comparative entre deux structures de tables différentes en ce qui concerne les performances d'insertion avec différentes clés. Est-ce important si j'utilise une variable de table pour faire ce test, ou devrais-je utiliser une table temporaire? Ou dois-je prendre la peine de créer les tables et les index?Comparaison de performances SQL Server - tables temporaires ou variables de table? Ou autre chose?
Plus précisément, je suis actuellement en utilisant le script suivant:
DECLARE @uniqueidentifierTest TABLE
(
--yes, this is terrible, but I am looking for numbers on how bad this is :)
tblIndex UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED,
foo INT,
blah VARCHAR(100)
)
DECLARE @intTest TABLE
(
tblindex INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
foo INT,
blah VARCHAR(100)
)
DECLARE @iterations INT = 250000
DECLARE @ctrl INT = 1
DECLARE @guidKey UNIQUEIDENTIFIER
DECLARE @intKey INT
DECLARE @foo INT = 1234
DECLARE @blah VARCHAR(100) = 'asdfjifsdj fds89fsdio23r'
SET NOCOUNT ON
--test uniqueidentifier pk inserts
PRINT 'begin uniqueidentifier insert test at ' + CONVERT(VARCHAR(50), GETDATE(), 109)
WHILE @ctrl < @iterations
BEGIN
SET @guidKey = NEWID()
INSERT INTO @uniqueidentifierTest (tblIndex, foo, blah)
VALUES (@guidKey, @foo, @blah)
SET @ctrl = @ctrl + 1
END
PRINT 'end uniqueidentifier insert test at ' + CONVERT(VARCHAR(50), GETDATE(), 109)
SET @CTRL = 1
--test int pk inserts
PRINT 'begin int insert test at ' + CONVERT(VARCHAR(50), GETDATE(), 109)
WHILE @ctrl < @iterations
BEGIN
INSERT INTO @intTest (foo, blah)
VALUES (@foo, @blah)
SET @ctrl = @ctrl + 1
END
PRINT 'end int insert test at ' + CONVERT(VARCHAR(50), GETDATE(), 109)
SET NOCOUNT OFF
Pourquoi pas une table temporaire être la même? Edit: Je peux penser au comportement de journalisation. –
@Martin: Toutes choses égales par ailleurs, mais pour obtenir une image claire de la performance réelle de la table, vous avez également besoin de tous les objets de base de données impactant les performances (index, statistiques, contraintes, triggers) , etc.). –
Raison pour laquelle une variable de table serait horrible pour cela est que vous ne pouvez pas créer d'index, etc. Les tables temporaires sont meilleures, mais vraiment pour tester les tables réelles, vous devriez avoir des tables réelles avec exactement les contraintes et les index. – HLGEM