【发布时间】:2014-11-19 19:14:52
【问题描述】:
我有一个复杂的 sql 查询,它返回前 100 条记录,用于构建带有分页的网格。 为了呈现分页,我需要总记录数。现在我正在查询数据库两次,首先是获取指定 where 条件产生的总记录(比如返回 12,567)
Select count(*) as TotalRecords from (select a.field1, b.field2, c.field3 from abc a inner join xyz b on b.id = a.id inner join .... where ...) temp
第二次获得前100条记录
select TOP 100 a.field1, b.field2, c.field3 from abc a inner join xyz b on b.id = a.id inner join .... where ...
这种方法的问题是由于重量级查询导致性能影响,有时运行两个查询需要很长时间。
有没有办法在不查询两次的情况下获得前 100 条记录以及总记录数?
【问题讨论】:
-
如何将总记录数整合到单个结果集中 - 一个额外的列?我认为您不会看到显着的性能提升 - 并不是您查询两次需要时间。
-
你可以使用 SELECT SQL_CALC_FOUND_ROWS TOP 100 a.field1, b.field2, c.field3 from abc a inner join xyz b on b.id = a.id inner join ....哪里...
-
您的标签指定 Oracle、MySQ 和 SQL-Server。是哪个?
-
对于 Oracle 和 SQL Server,使用
count(*) over ()的窗口函数可能会解决问题。
标签: mysql sql sql-server oracle sql-server-2008