Я написал запрос, где я собираю записи, а также общее количество записей. У меня есть два подхода в виду, но не могу понять, какой из них лучше и дешевлеSQL - лучший подход к подсчету всех записей
Сначала с несколькими КТР-х
;with allRecords as
(
-- query fetching all the records with many joins
),
recordsCount as
(
select count(*) as RecordsCount from allRecords
)
select * from allRecords, recordsCount
Второй подход, с помощью КТР и крест присоединиться
;with allRecords as
(
-- query fetching all the records with many joins
)
select *, c.totalRecords from allRecords
cross join (select count(*) as totalRecords from allRecords) c
I лично чувствовал себя очень незначительно лучше во втором подходе.
Так что, в первом подходе, второй cte вызывается каждый раз для всех записей первого cte или он просто запускается один раз, когда первый cte заканчивается? Тогда я думаю, что нет проблем с использованием первого подхода.
Предложения пожалуйста!
не уверен, что я полностью понимаю вопрос, но разве аналитическая функция не будет работать для вас? 'COUNT (*) OVER()' – mcha
@mcha Первоначально я использовал это только, но у меня много времени, и поэтому я переключился на CTE –
, интересно ли вам добиться лучшей производительности с помощью других методов? – mcha