MSSQL分页查询总数高效实现方案,网友推荐实用技巧,轻松解决数据统计难题

文章导读
高效方案:使用COUNT(*) OVER()窗口函数结合分页,避免两次查询。代码示例:SELECT *, COUNT(*) OVER() AS TotalCount FROM (SELECT TOP 10 * FROM Table1 ORDER BY Id) t ORDER BY Id; 这就是网友最推荐的实用技巧,一次查询搞定总数和分页数据,超级轻松解决统计难题。
📋 目录
  1. 网友分享1
  2. 网友分享2
  3. 网友分享3
  4. 网友分享4
  5. 网友分享5
  6. 网友分享6
  7. FAQ
A A

高效方案:使用COUNT(*) OVER()窗口函数结合分页,避免两次查询。代码示例:SELECT *, COUNT(*) OVER() AS TotalCount FROM (SELECT TOP 10 * FROM Table1 ORDER BY Id) t ORDER BY Id; 这就是网友最推荐的实用技巧,一次查询搞定总数和分页数据,超级轻松解决统计难题。

网友分享1

我用的是这种方法,COUNT OVER()真香!以前分页总要查两次,一次总数一次数据,现在一次OK。SELECT *, (SELECT COUNT(*) FROM Table1) AS Total FROM Table1 ORDER BY Id OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY; 不,窗口函数更好,不用子查询。

网友分享2

窗口函数是王道!在SQL Server 2012+版本,SELECT Column1, Column2, COUNT(*) OVER() TotalCount FROM YourTable ORDER BY SomeColumn OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY; 总数直接带出来,前端分页轻松实现,不用额外请求。

网友分享3

实用技巧:如果表很大,别用COUNT(*)全表,会慢。用索引优化,或者COUNT(1) WHERE条件相同。完整代码:WITH CTE AS (SELECT *, ROW_NUMBER() OVER(ORDER BY Id) rn FROM Table1 WHERE condition) SELECT *, (SELECT COUNT(*) FROM CTE) total FROM CTE WHERE rn BETWEEN 1 AND 10; 但窗口函数更简洁。

网友分享4

我推荐这个,超高效:DECLARE @PageSize INT=10, @PageIndex INT=1; SELECT *, COUNT(*) OVER() AS TotalRecords FROM Table1 ORDER BY CreateTime DESC OFFSET (@PageIndex-1)*@PageSize ROWS FETCH NEXT @PageSize ROWS ONLY; 测试百万数据,秒出结果!

网友分享5

别忽略索引!在ORDER BY字段加索引,分页飞起。代码同上,COUNT(*) OVER()是神器,网友都说比Keyset分页还简单,轻松统计总数。

MSSQL分页查询总数高效实现方案,网友推荐实用技巧,轻松解决数据统计难题

网友分享6

老版本SQL Server,用TOP和子查询:SELECT *, (SELECT COUNT(*) FROM Table1) cnt FROM (SELECT TOP 10 * FROM Table1 ORDER BY Id DESC) t ORDER BY Id; 但新版窗口函数无敌。

FAQ

Q: 为什么不用两次查询?
A: 两次查询在大数据量下性能差,窗口函数一次搞定。

Q: 窗口函数支持哪个版本?
A: SQL Server 2005+支持OVER(),2012+完美分页。

Q: 总数怎么前端显示?
A: 直接从TotalCount字段取,用在分页控件。

Q: 表超大怎么办?
A: 加WHERE条件+索引,测试用EXPLAIN看计划。