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

最初の方が速いと思いますが、試してみましょう!

選択の 2 番目のグループで 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

それでは、2番目で試してみましょう:

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 回実行しました !!

結論として、フィールドを 1 つ表示する場合と 4 つ表示する場合では違いはありませんが、select4 つに対して 1 つ表示する場合には大きな違いがありました。

単純な質問であることはわかっていますが、「科学/研究」をしたかったのです。

于 2012-07-24T22:21:22.927 に答える
1

大きな違いがあります。最初の方法ではテーブルを1回スキャンするだけでよく、2番目の方法ではテーブルを4回スキャンする必要があります。

SQLプロバイダーがこれを最適化することは可能ですが、いずれも最適化できないと思います。とにかく、SQLは通常、ホスト言語からアクティブ化され、各クエリはプロバイダーに個別に送信されます。したがって、プロバイダーがこれを最適化する方法はありません。別々のクエリを一緒に最適化する...

于 2012-07-24T22:15:50.003 に答える
0

2番目のケースでタイプミスを想定すると、クエリを1つだけ実行し、接続を1つだけ行うため、最初のタイプの方が速くなります。

于 2012-07-24T22:16:02.407 に答える
0

Aを4回取得したいとします。

最初のオプションでは、1つのクエリのみが実行され、2番目のオプションでは4つあります。これは、DBがクエリを複数回実行する必要があることを意味します。

非常に大きなテーブルがあり、4つの列すべてを返すために全表スキャンが必要でない限り、最初のオプションは常に高速である必要があります。その場合、Aにインデックスが付けられた場合、4回のラウンドトリップの合計結果が、すべての列を取得するよりも速くなる可能性がわずかにあります。

2番目のオプションにタイプミスがあった場合、1。は常に高速である必要があります。

于 2012-07-24T22:16:37.767 に答える