トップ1を使用しているときにデータベースが選択ループを1つのレコードに速くブレークしますか?1つだけの行を選択するとトップ1が速くなります
はだから select top 1 * from customer where cusId = 1234
は select * from customer where cusId = 1234
よりも速いのですか?
cusId
はユニークなので、MSSqlはtop 1
を使用しないと「高速」になると理解していますか?
トップ1を使用しているときにデータベースが選択ループを1つのレコードに速くブレークしますか?1つだけの行を選択するとトップ1が速くなります
はだから select top 1 * from customer where cusId = 1234
は select * from customer where cusId = 1234
よりも速いのですか?
cusId
はユニークなので、MSSqlはtop 1
を使用しないと「高速」になると理解していますか?
cusId
がプライマリキーの場合、両方とも同じパフォーマンスでなければなりません。
EDIT:あなたはとにかく1件の結果を返します一意のインデックスを持っている場合にのみ、TOP 1でのオーバーヘッドを追加している
。
ご注文いただいた商品が、1つの行だけに興味がある場合よりも異なります。
MORE:
テーブルが関与してcusId
のためのすべてのインデックスがないスキャンが存在しない限り、ループ関与は、ありません。その場合、TOP 1
はどうしてもあなたを助けません。 (FASTFIRSTROW)と私の意見では
'cusIs'が主キーでないときはどうですか? –
+1 - 実行計画を比較すると、「トップ」に余分なステップがありますが、コストはカウントできないほど小さいです。 –
それは最初のものよりも実行するために一つの操作以下であるcのselect * from customer where cusId = 1234
は/よりfaster..bになります...
真ですが、その差は小さく(cusIdが一意であるため)、無視することができます。 – Kamyar
は*時々*役立ちます。汚い読み込みが受け入れられる場合、WITH(NOLOCK FASTFIRSTROW)を持つことは珍しいことではありません。 – SQLMason
この無意味なトップ演算子をクエリに追加することを心配するよりも、*(実際にすべての列を使用している場合でも)を使用せず、顧客を正しく参照する(dbo.customer)ことで、パフォーマンスとメンテナンス性が大幅に向上すると思われます。 –