2009-08-11 6 views

答えて

7

ORDER BY句がない場合、「TOP N」の修飾されたSELECTの結果は不確定です。

+0

厳密には、ORDER BYのないSELECTの結果は不定です。 TOPはn行を5行に制限するだけなので、どのような順序でもすべての行ではなく、5つの行が得られます。 – gbn

+0

Heh。まあ*厳密には、注文は通常不確定です(SQLの場合、ORDER BYがなければ技術的には存在しません)。しかし、TOPでは、ORDER BYなしでは実際の*内容*は不確定です。 – RBarryYoung

+1

私たちはどちらも正しいですが、TOPは不確定な注文の結果です;-)最初の回答のために+1を依頼しました – gbn

3

ORDER BY句がないと、結果を得る順序を予測できません。おそらく、SQL Serverがこれらのクエリを異なる方法で処理する理由についての興味深い根底にある理由がありますが、ユーザーの観点からは、単にクエリに関連するORDER BY句を課すだけで、5つの項目が最初に来ることを保証します。

2

理由は簡単です。ORDER BY句を指定しなかったためです。例えば、オプティマイザは、異なるIDを使用して2つの異なるクエリーを満たすことができます。カテゴリIDではなく、最初のクエリーを満たすためには、ItemIDを含むリーンインデックスがあります。

ORDER BY句を指定していないので

Without ORDER BY, there is no default sort order.

3

は、オプティマイザがあなたの求めているクエリを実行するための最も効率的な方法を決定します。非常に一般的な質問は、缶詰naswerを持っています。つまり、2つのクエリで指定した2つの列に対して異なるインデックス作成が行われる可能性があります。その結果、表示される結果になります。

+0

他は言語自体に基づいて正しいものですが、これはSQL Serverのスポットライトです。見積もり実行計画を調査すると、多くの異なる指標が使用される可能性があります。しかし、私の腸は、問題のテーブルにインデックスがないと私に伝えます。私からの –

+0

+1、ところで。 –

関連する問題