私はデータのページを返すと、以下のように見える1つのストアドプロシージャ内のすべてのデータのカウントを行しようとしています:CTE、ROW_NUMBERとROWCOUNT
WITH Props AS
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY PropertyID) AS RowNumber
FROM Property
WHERE PropertyType = @PropertyType AND ...
)
SELECT * FROM Props
WHERE RowNumber BETWEEN ((@PageNumber - 1) * @PageSize) + 1 AND (@PageNumber * @PageSize);
は、私は(行数を返すことができません最も高い行番号)。
私は、これはすでに議論されている(私はこれを見てきました: Efficient way of getting @@rowcount from a query using row_numberを)知っているが、私はCTEの性能が低下してCOUNT(x)はOVER(1 BY PARTITION)を追加し、その上でクエリが正常にかかるとき永遠に実行に時間がかかることはありません。カウントは各行ごとに計算されているので、私はそれを考えていますか?私は別のクエリでCTEを再利用することはできないようです。テーブルの小道具は100kレコード、CTEは5kレコードを返します。
は、SQL Serverの問題として再タグ付けすべき照会しています。私はあなたのためにそれをやっただろうが、あなたは5つのタグしか許されていない。あなたが取り除きたいと思うものは分からなかった。 –