Sql server CTE分页,带计数

Sql server CTE分页,带计数,sql-server,tsql,sql-server-2005,pagination,common-table-expression,Sql Server,Tsql,Sql Server 2005,Pagination,Common Table Expression,我有一个正在运行的存储过程,我尝试使用分页,但也返回整个产品计数。它正在“工作”,但问题是,当我取出totalCount CTE并将其从最终选择中删除时,存储过程将在约50毫秒内运行。当我把它放在那里时,我的查询需要7-8秒。如果我抓取所有记录,这是一个很大的查询,但我的想法是只抓取我需要的页面,但我需要返回总记录。有没有更有效的方法 /**主搜索块**/ WITH search_results AS ( SELECT DISTINCT ROW_NUMBER() OVER (

我有一个正在运行的存储过程,我尝试使用分页,但也返回整个产品计数。它正在“工作”,但问题是,当我取出totalCount CTE并将其从最终选择中删除时,存储过程将在约50毫秒内运行。当我把它放在那里时,我的查询需要7-8秒。如果我抓取所有记录,这是一个很大的查询,但我的想法是只抓取我需要的页面,但我需要返回总记录。有没有更有效的方法

/**主搜索块**/

WITH search_results AS
(

SELECT DISTINCT     
    ROW_NUMBER() OVER (ORDER BY @sortExpression) as rowNumber,
            products.pid,
            brands.bid,
            brands.brand_name,
            products.model,
            products.name,
            products.searchedprice
            products.status

FROM products WITH (NOLOCK)
            JOIN brands WITH (NOLOCK) ON products.bid=brands.bid

WHERE   
    (
           CONTAINS(products.*,@inflectionSearchText)
           OR
           CONTAINS(brands.Brand_Name,@inflectionSearchText)
    )
    AND
      products.productstatus=1
    AND 
      brands.brandstatus=1
    AND
      products.searchedprice BETWEEN @fromprice TO @toprice

),
totalCount AS 
(SELECT COUNT(*) Total FROM search_results)

SELECT * 
FROM search_results, totalCount
WHERE 
     rowNumber BETWEEN ((@pageNumber-1)*@pageSize)+1 
         AND ((@pageNumber-1)*@pageSize)+@pageSize

ORDER BY products.model

您可以使用以下方法检索计数,而无需执行子选择

SELECT some_field, COUNT(*) OVER() AS total
FROM some_table

行号为()且没有分组的独立字符?为什么?你看过执行计划了吗,特别是在
搜索结果
总计数
之间的最后一个
连接
?返回
输出中的总计数是否足够?是否接近
Max(行数)