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