SELECT A,B,C,D from Table1 Where Constraint1
对比
SELECT A from Table1 Where Constraint1
SELECT B from Table1 Where Constraint1
SELECT C from Table1 Where Constraint1
SELECT D from Table1 Where Constraint1
有什么性能差异吗?
SELECT A,B,C,D from Table1 Where Constraint1
对比
SELECT A from Table1 Where Constraint1
SELECT B from Table1 Where Constraint1
SELECT C from Table1 Where Constraint1
SELECT D from Table1 Where Constraint1
有什么性能差异吗?
我认为第一个更快,但是..让我们测试一下!
考虑在第二组选择中返回 A、B、C 和 D。
输入SQL SERVER 2008 R2
:
让我们尝试一下:
Create Table Test
(
A int not null,
B int not null,
C int not null,
D int not null,
)
insert into Test values (1,2,3,5)
第一个运行执行计划:
select A, B, C, D from Test
这导致:
它是西班牙语,但你可以看到数字。CPU 成本为0.0000796
所以,让我们试试第二个:
select A from Test
select B from Test
select C from Test
select D from Test
这导致:
如您所见,每个选择使用相同的 CPU 成本,但是..这里必须进行 4 次选择。有一点点,你不会看到区别,但是,让我更新一下,用更多的数据
更新
现在,我做了几个插入,现在我们有:
select count(*) from test
76183 rows
让我们做同样的事情:我们得到了第一个select
,在执行计划中,我们得到了:
如您所见,我们得到了更多CPU COST
(当然,更多行!)
然后让我们检查 4 个选择:
同样,我们得到了相同的结果CPU COST
,但我们运行了 4 次!!
总而言之,显示一个或四个字段没有区别,但是我们在做一个select
对 4 个时有很大的不同。
我知道这是一个简单的问题,但我想做一些“科学/研究”
有一个很大的区别——第一种方法只需要扫描一次表,而第二种方法必须扫描表 4 次。
虽然 SQL 提供程序可以对此进行优化,但我怀疑它们中的任何一个都可以,而且无论如何,SQL 通常是从宿主语言激活的,并且每个查询都是单独发送给提供程序的 - 所以提供程序没有办法一起优化单独的查询...
假设您的第二种情况有错字,第一种情况会更快,因为您只执行一个查询,因此只建立一个连接。
我假设您要检索 A 四次。
在第一个选项中,只进行 1 个查询,而在第二个选项中,您有 4 个,这意味着数据库必须多次执行查询。
除非您有一个非常大的表并且需要全表扫描来返回所有 4 列,否则第一个选项应该总是更快。在这种情况下,如果 A 被索引,则 4 次往返的组合结果可能比获取所有列更快。
如果您的第二个选项中有错字,那么 1. 应该总是更快。