sql情况下最快的字符串比较
我有一个直接的sql情况下最快的字符串比较,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我有一个直接的SELECT查询。现在我需要根据另一个varchar列更改一列中的值 这里有一个例子: SELECT Company_Name, CASE WHEN Size = 'Large' THEN Company_Name ELSE 'Small company' end, CASE WHEN left (Size,1) = 'L' THEN Company_Name ELSE 'Small company' end,
SELECT
查询。现在我需要根据另一个varchar列更改一列中的值
这里有一个例子:
SELECT
Company_Name,
CASE
WHEN Size = 'Large' THEN Company_Name
ELSE 'Small company'
end,
CASE
WHEN left (Size,1) = 'L' THEN Company_Name
ELSE 'Small company'
end,
CASE
WHEN ASCII(Size) = 76 THEN Company_Name
ELSE 'Small company'
end,
Size
FROM MyTable
这里我有3个CASE
s。哪一个更快?此查询用于数据提取,它没有WHERE
子句
非常感谢
更新
问:为什么我不能在桌子上跑步
A:
DBCC DROPCLEANBUFFERS
对于正常数据量,三个选项之间不会有任何显著差异。我在一张有1000万条记录的桌子上测试了这个
CREATE TABLE dbo.Sizes
(
ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
Size NVARCHAR(15) NOT NULL
)
DECLARE @i INT;
SET @i = 0;
WHILE @i < 10000000
BEGIN
INSERT dbo.Sizes (Size)
VALUES (N'Small'), (N'Medium'), (N'Large');
SET @i = @i + 3;
END
第一次测试的结果
SET STATISTICS TIME ON;
GO
SELECT ID,
CASE
WHEN Size = N'Large' THEN CAST(ID AS NVARCHAR(25))
ELSE N'Small company'
END AS 'SizeDescription',
Size
FROM dbo.Sizes;
GO
SET STATISTICS TIME OFF;
GO
SQL Server解析和编译时:
CPU时间=0毫秒,运行时间=1毫秒
(10000002行受影响)
SQL Server执行时间:
CPU时间=7422毫秒,运行时间=64791毫秒。
SQL Server解析和编译时:
CPU时间=0毫秒,运行时间=0毫秒
第二次测试
SET STATISTICS TIME ON;
GO
SELECT ID,
CASE
WHEN LEFT(Size,1) = N'L' THEN CAST(ID AS NVARCHAR(25))
ELSE N'Small company'
END AS 'SizeDescription',
Size
FROM dbo.Sizes;
GO
SET STATISTICS TIME OFF;
GO
第二次测试的结果
SET STATISTICS TIME ON;
GO
SELECT ID,
CASE
WHEN LEFT(Size,1) = N'L' THEN CAST(ID AS NVARCHAR(25))
ELSE N'Small company'
END AS 'SizeDescription',
Size
FROM dbo.Sizes;
GO
SET STATISTICS TIME OFF;
GO
SQL Server解析和编译时:
CPU时间=0毫秒,运行时间=1毫秒
(10000002行受影响)
SQL Server执行时间:
CPU时间=8203毫秒,运行时间=69081毫秒。
SQL Server解析和编译时:
CPU时间=0毫秒,运行时间=0毫秒
第三次测试
SET STATISTICS TIME ON;
GO
SELECT ID,
CASE
WHEN ASCII(Size) = 76 THEN CAST(ID AS NVARCHAR(25))
ELSE N'Small company'
END AS 'SizeDescription',
Size
FROM dbo.Sizes;
GO
SET STATISTICS TIME OFF;
GO
第三次测试的结果
SET STATISTICS TIME ON;
GO
SELECT ID,
CASE
WHEN ASCII(Size) = 76 THEN CAST(ID AS NVARCHAR(25))
ELSE N'Small company'
END AS 'SizeDescription',
Size
FROM dbo.Sizes;
GO
SET STATISTICS TIME OFF;
GO
SQL Server解析和编译时:
CPU时间=0毫秒,运行时间=1毫秒
(10000002行受影响)
SQL Server执行时间:
CPU时间=8031毫秒,运行时间=69460毫秒。
SQL Server解析和编译时:
CPU时间=0毫秒,运行时间=0毫秒
CPU时间是关键测量值,这与三个测试(7.4到8.2秒)基本相同
如果需要加快查询速度,可以通过使用单个字符或tinyint替换大小字段来减小大小字段的大小。这将减小表的总体大小并加快I/O
你还需要考虑返回结果的时间,这可能是限制因素。并且确实锁定了表--其他用户是否在运行查询的同时更新了表?只需在查询中分别使用每种情况并运行它们即可。看看哪一个更快。没有其他办法回答这个问题。“我这里有3个$foo。哪一个更快?”-你测量过吗?我处于开发阶段,我的表太小,目前无法测量。@Stoleg然后用测试数据填充你的表;-)@ThorstenDittmar嗯。。。如果我能做的话,我早就做了。你认为经验方法是唯一的方法吗?你能添加逻辑/物理数据吗。你在测试之间做了
DBCC DROPCLEANBUFFERS
吗?@Stoleg你为什么不接受我做的,做更多的实验,并在这里分享结果?然而,我认为你不必要地担心你所问的三种选择之间可能存在的细微差异。如果你想提供更多的信息,建议你会有所帮助。表结构、数据卷、应用程序用途、报告要求、更新卷等@Stoleg如果问题是您无法访问SQL Server进行测试,则至少有三个选项:您可以下载免费的SQL Server Express,SQL Server Developer Edition的180天免费试用版,或者向Microsoft Azure注册一个免费帐户。