0
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

有什么性能差异吗?

4

4 回答 4

3

我认为第一个更快,但是..让我们测试一下!

考虑在第二组选择中返回 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 个时有很大的不同。

我知道这是一个简单的问题,但我想做一些“科学/研究”

于 2012-07-24T22:21:22.927 回答
1

有一个很大的区别——第一种方法只需要扫描一次表,而第二种方法必须扫描表 4 次。

虽然 SQL 提供程序可以对此进行优化,但我怀疑它们中的任何一个都可以,而且无论如何,SQL 通常是从宿主语言激活的,并且每个查询都是单独发送给提供程序的 - 所以提供程序没有办法一起优化单独的查询...

于 2012-07-24T22:15:50.003 回答
0

假设您的第二种情况有错字,第一种情况会更快,因为您只执行一个查询,因此只建立一个连接。

于 2012-07-24T22:16:02.407 回答
0

我假设您要检索 A 四次。

在第一个选项中,只进行 1 个查询,而在第二个选项中,您有 4 个,这意味着数据库必须多次执行查询。

除非您有一个非常大的表并且需要全表扫描来返回所有 4 列,否则第一个选项应该总是更快。在这种情况下,如果 A 被索引,则 4 次往返的组合结果可能比获取所有列更快。

如果您的第二个选项中有错字,那么 1. 应该总是更快。

于 2012-07-24T22:16:37.767 回答