多个选择查询与在单个查询中选择多个变量

时间:2012-07-24 22:11:04

标签: sql

SELECT A,B,C,D from Table1 Where Constraint1

VS

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 个答案:

答案 0 :(得分:3)

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

考虑在第二组选择中返回A,B,C& d。

IN 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

,结果如下:

enter image description here

这是西班牙语,但你可以看到数字。 CPU成本为0.0000796

所以,让我们试试第二个:

select A from Test
select B from Test
select C from Test
select D from Test

,结果如下:

enter image description here

正如您所看到的,每个select都使用相同的CPU Cost,但是..这里必须做4次选择。有了一点,你就看不出差异了,但是,让我用更多数据更新

<强>更新

现在,我做了几个插页,现在我们有了:

select count(*) from test

76183 rows

让我们这样做:我们得到了第一个select,并且在执行计划中,我们得到了:

enter image description here

正如您所看到的,我们获得了更多CPU COST(当然,还有更多行!)

然后让我们检查4个选择:

enter image description here

同样,我们得到了相同的CPU COST,但我们运行了4次!!

总之,显示一个字段或四个字段没有区别,但是我们对一个字段select与4字段有很大的不同。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

假设在第二种情况下出现拼写错误,第一种情况会更快,因为您只执行一次查询,因此只进行一次连接。

答案 3 :(得分:0)

我假设你想要检索A四次。

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

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

如果你的第二个选项中有拼写错误,那么1.应该总是更快。