SQL Server 2008では、ユーザーがデータベースに対してクエリを実行できるアプリケーションがあります。数百万の結果と税制のシステムリソースを返すクエリを実行しないようにしたい。ユーザーが自分でCOUNT(*)
を実行しようとするまで細かい作品一般的なSQL Serverのカウントの構文
Select count(*) as COUNT
from (SELECT SOMETHING FROM SOMETABLE) as TMPCOUNT0;
:現在のソリューションはそうのような数(*)関数内で入力されているものは何でも、クエリのラップです。いいえ列名が「TMPCOUNT0」の1列目に指定されなかった
:
Select count(*) as COUNT from (SELECT COUNT(*) FROM SOMETABLE) as TMPCOUNT0; --(should return 1)
ただしSQL Serverは、と私のインナー
COUNT(*)
コラムは私の派生テーブルとエラーアウトに名前がないことを好きではありません。
は、私は、内数名を指定して、クエリを実行していた場合、私はこの問題を解決する可能性が知っているが、エンドユーザーはこのことを認識しないので、私はよりエレガントな解決策を見つけることを願っています。
アイデア?
私はいつもこうします:SELECT count( 'x')FROM SOMETABLE;任意の列をフェッチする必要はありません。 count()を2回も実行しません。 –
@Eric K. Yung:「COUNT(1)」がCOUNT(*)より効率的であるという都市神話です.SQL Serverのクエリオプティマイザは、これが単なるCOUNT操作であることを理解するほどスマートです。式の中の(*)のためにすべてのデータを "フェッチ"します... –
@Eric K. Yung、@marc_s:都市の神話確かに:-) http://stackoverflow.com/questions/1221559/count-vs- count1/1221649#1221649 – gbn