【问题标题】:SQL query with top x records and full record count具有前 x 条记录和完整记录计数的 SQL 查询
【发布时间】: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


【解决方案1】:

不可能一次性完成,因为您的两个查询都返回不同的结果集。一个只返回记录数,而另一个返回前 100 条记录。记录数不会对查询性能产生太大影响,但您也可以使用 Count(fieldName) 来优化查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2011-03-18
    相关资源
    最近更新 更多