次のような1つのストアドプロシージャで、データのページとすべてのデータの行数を返そうとしています。
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);
行数(最大行数)を返すことができません。
私はこれがすでに議論されていることを知っています(私はこれを見ました:
row_numberを使用してクエリから@@ rowcountを取得する効率的な方法)が、CTEを追加するCOUNT(x) OVER(PARTITION BY 1)
と、パフォーマンスが低下し、通常は時間がかからない上記のクエリは永遠にかかります実行する。行ごとにカウントが計算されるからだと思いますか?CTEを別のクエリで再利用できないようです。テーブルプロップには100kレコードがあり、CTEは5kレコードを返します。