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
パフォーマンスの違いはありますか?
最初の方が速いと思いますが、試してみましょう!
選択の 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 つ表示する場合では違いはありませんが、select
4 つに対して 1 つ表示する場合には大きな違いがありました。
単純な質問であることはわかっていますが、「科学/研究」をしたかったのです。
大きな違いがあります。最初の方法ではテーブルを1回スキャンするだけでよく、2番目の方法ではテーブルを4回スキャンする必要があります。
SQLプロバイダーがこれを最適化することは可能ですが、いずれも最適化できないと思います。とにかく、SQLは通常、ホスト言語からアクティブ化され、各クエリはプロバイダーに個別に送信されます。したがって、プロバイダーがこれを最適化する方法はありません。別々のクエリを一緒に最適化する...
2番目のケースでタイプミスを想定すると、クエリを1つだけ実行し、接続を1つだけ行うため、最初のタイプの方が速くなります。
Aを4回取得したいとします。
最初のオプションでは、1つのクエリのみが実行され、2番目のオプションでは4つあります。これは、DBがクエリを複数回実行する必要があることを意味します。
非常に大きなテーブルがあり、4つの列すべてを返すために全表スキャンが必要でない限り、最初のオプションは常に高速である必要があります。その場合、Aにインデックスが付けられた場合、4回のラウンドトリップの合計結果が、すべての列を取得するよりも速くなる可能性がわずかにあります。
2番目のオプションにタイプミスがあった場合、1。は常に高速である必要があります。