0

SQL に取り組んでおり、パフォーマンスの面ではそれほど技術的ではありません。C#を使用して動的にクエリを形成し、ページネーションの目的を念頭に置いています

ページネーションをクリックするたびに、10個のレコードと以下のようなサンプルクエリを取得します

Select * 
from (Select ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) as paging  
Where RowNumber BETWEEN 10 AND 20

ここで、testId は主キーです。

これは完璧に機能します。機密データであるため、構文を投稿しました。たとえば6秒で実行されます

ユーザーが最後のページをクリックすると、以下のクエリが形成されます

Select * 
from (Select ROW_NUMBER() OVER (ORDER BY TestId)[RowNumber],TestId...........) as paging  
Where RowNumber BETWEEN 30000 AND 30010

上記のクエリには 40 秒かかります。

私が欠けているコアのものは何ですか

毎回10件のレコードを取得しますが、時間に大きな違いがあります

ありがとう

4

2 に答える 2

0

この問題を回避する方法はありません。すべての方法で、何らかの方法ですべての行の数値を計算する必要があり、それらを一時テーブル/インデックス付きビューで事前に計算するか、SQL サーバーにその場でこれを実行させます (現在のソリューション)。

現在のクエリのパフォーマンスを向上させたい場合は、含まれている列を使用して (既に PK であっても) TestId に追加してインデックスを作成します (返されるすべての列を含める必要があります)。

create index idxI__testid on <yourtable> (TestId) include (<column1>,<column2>)

ただし、いくつかの列のみを返したい場合にのみ意味があります。

于 2013-10-01T13:43:46.340 に答える