2017-12-20 12 views
1

インデックスのない列で注文された大きなテーブルとクエリがあります。 私はページングのための行が必要なので、最初のN行を最初に、そしておそらく次のN行を意味するので、カーソルを宣言します。ヒントOPTION(FAST n)は私のために何の違いもありません

DECLARE cur CURSOR FOR select TOP(@N) col1,col2 from table order by col2; 

私がしました:私は例えば、私がTOP(N)を言うならば、それは非常に速く、それをバック与えるので、SQL Serverが速い最初のN行を与えるために最適化することができることを知って

DECLARE cur CURSOR FOR select col1,col2 from table order by col2; 

私は高速の最初のN行を与えるために、サーバーを頼むことができることを読んでいないので、私はそれを試してみた:

DECLARE cur CURSOR FOR select TOP(@N) col1,col2 from table order by col2 OPTION (FAST @N); 

残念ながら何の効果も、それがヒントなしのように遅いですすなわち。 なぜですか? どうすれば解決できますか?

答えて

2

FASTオプションは、適用するクエリに違いはありません。

違いが生じるクエリでは、通常、いくつかの異なる結合があるため、クエリプランナはデータの取得方法にいくつかの選択肢があります。データを結合するときは、全体的に速い方法と、最初の行をすばやく返しますが、全体的に遅くなる方法があります。これらの選択肢が存在するクエリに対してFASTオプションを指定すると、クエリプランナは最初の行をより迅速に返すものを選択します。

索引付けされていない列をソートする場合、最初の行が戻される前に表全体を読み取る必要があるため、常に遅くなります。インデックスを追加することは、本当にそのクエリをより速くする唯一の方法です。

+0

正確ではありません。テーブルは1秒以内に読み取ることができます。カーソルが5秒後に記録を開始します。例えば私に尋ねるならTOP(10)、それは非常に速く戻る。読取り行のcol2にNULL値がある場合、順序付けられた結果セットに入れることができます。私が単にカーソルなしでクエリを実行すると、それはカーソルからどのようにしたいのですか? – quantummind

+0

私はあなたがそこに何を言っているのかは分かりませんが、おそらくあなたはその質問に新しい情報を与えることができます。既に述べたように、FASTは特定の状況でのみ違いを生みます。私は、FASTの有無にかかわらずクエリプランをチェックすることをお勧めします(そして、違いはないでしょう) –

関連する問題