2011-07-05 6 views
7

トップ1を使用しているときにデータベースが選択ループを1つのレコードに速くブレークしますか?1つだけの行を選択するとトップ1が速くなります

はだから select top 1 * from customer where cusId = 1234

select * from customer where cusId = 1234 よりも速いのですか?

cusIdはユニークなので、MSSqlはtop 1を使用しないと「高速」になると理解していますか?

+1

は*時々*役立ちます。汚い読み込みが受け入れられる場合、WITH(NOLOCK FASTFIRSTROW)を持つことは珍しいことではありません。 – SQLMason

+1

この無意味なトップ演算子をクエリに追加することを心配するよりも、*(実際にすべての列を使用している場合でも)を使用せず、顧客を正しく参照する(dbo.customer)ことで、パフォーマンスとメンテナンス性が大幅に向上すると思われます。 –

答えて

4

cusIdがプライマリキーの場合、両方とも同じパフォーマンスでなければなりません。

EDIT:あなたはとにかく1件の結果を返します一意のインデックスを持っている場合にのみ、TOP 1でのオーバーヘッドを追加している

ご注文いただいた商品が、1つの行だけに興味がある場合よりも異なります。

MORE:

テーブルが関与してcusIdのためのすべてのインデックスがないスキャンが存在しない限り、ループ関与は、ありません。その場合、TOP 1はどうしてもあなたを助けません。 (FASTFIRSTROW)と私の意見では

+0

'cusIs'が主キーでないときはどうですか? –

+4

+1 - 実行計画を比較すると、「トップ」に余分なステップがありますが、コストはカウントできないほど小さいです。 –

0

それは最初のものよりも実行するために一つの操作以下であるcのselect * from customer where cusId = 1234は/よりfaster..bになります...

+0

真ですが、その差は小さく(cusIdが一意であるため)、無視することができます。 – Kamyar

関連する問題