2017-12-28 39 views
1

は、私は、次のようにクエリを持っています。SQLクエリの実行時間、SQL Serverの、ネストされたクエリ

しかし、クエリはすぐに実行されます。 (でも一秒未満))

select count(*) as numberOfRows from (SELECT Brand,Id,Model FROM product) result

なぜですか?

+0

おそらく、クエリオプティマイザは、レコードの数だけを取得するようにクエリを最適化でき、すべてのレコード自体を取得することができないためです。 'SELECT count(*)FROM product' –

+0

SQL Serverはインテリジェントなので、実際には選択した列で何もしていないので、' count(*) 'を実行するだけです。実行計画を確認してください。 – HoneyBadger

答えて

0

クエリを実行すると、取得される時間は、列と行の数とそのデータ型によって異なります。

10個の列があるテーブルでは、すべてのレコードに対してすべての列(*)を選択し、すべてのレコードに対して1または2列を選択すると、パフォーマンスが異なります。 2番目のケースでは、読み込まれるデータの量が少なくなるため、より高速に実行されます。

ちょうどそのように、Count(*)と言うと、結果は単なるCellですが、最初のSelectでは、これらの3つの列に対して何百万もの行が選択されています。

そのため、Count(*)の結果がより速くなっています。カウントの中に*を付ける必要はありません。代わりにCount(1)を使用すると、より良いパフォーマンスが得られます。

+0

あなたが言うことは限界性能問題に適用されるかもしれませんが、実際には問題とは関係ありません。 'count(*)'と 'count(1)'は同じ性能を持っています。 –

関連する問題