У меня есть sproc, который я запускаю, я пытаюсь использовать разбивку на страницы, но также возвращаю все количество товаров. Это «работает», но проблема в том, что когда я вынимаю totalCount CTE и удаляю его из окончательного SELECT, мой sproc работает в ~ 50 мс. Когда я держу его там, мой запрос занимает 7-8 секунд. Это большой запрос, если я захвачу все записи, но идея состоит в том, чтобы захватить только нужную мне страницу, но мне нужно вернуть итоговые записи. Есть ли более эффективный способ сделать это?CTE Paging, с графом
/** ГЛАВНАЯ ПОИСК BLOCK **/
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)[email protected]
ORDER BY products.model
отчетливую с row_number() и не группировка? Зачем? –
Вы просмотрели план выполнения, особенно для этого последнего 'JOIN' между' search_results' и 'totalCount'? Можно было бы возвращать общее количество в параметре 'OUTPUT'? Он будет близок к 'Max (rowNumber)'? – HABO