我们正在优化我们的数据库。我们有大部分使用 CTE 的存储过程,因为它根据我们的表结构为我们提供了高性能。我们几乎有动态查询,根据不同的条件有不同的结果。我们将所有数据保存在CTE 和检查条件,这不是问题,但我们需要每个查询返回的总行数,计算它需要很多时间。临时表或表变量不适合我们的情况,因为它需要很多时间在其中插入数据。我们的结构如下
With t(fields) as
(select field1,field2.......
ROW_NUMBER() OVER (order by some column) as row...
from some table and lots of
inner n left joins
where some condition ),
rowTotal(RowTotal) as
(select max(row) from t)
select * from t,RowTotal
where condition for paging
但是如果我删除它,max(row) 会花费很多时间,它会在 100 毫秒内返回数据。我尝试了 Coun(*),Count(SomeField) 和许多其他的方法,但花了很多时间。我怎样才能在一些毫秒内从 cte 获得总行数,任何聚合函数都不适合我。有没有其他方法可以像@@rowcount 一样计算rowtotal。提前感谢您的帮助。