当前位置: 首页 > 面试题库 >

SQL Server 2008 R2中的有效分页

洪建茗
2023-03-14
问题内容

我想编写一个执行以下操作的存储过程:返回与查询匹配的记录数(以确定要显示给用户的页面数)从当前页面的查询返回具有特定记录子集的另一个记录集。

从我发现的另一个问题(对不起,我丢失了链接),我发现我们这样做是分页的:

SELECT u.* FROM 
(
    SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) as rownum FROM
    (
        [obscenely long select query]
    )
    as t
)
AS u WHERE u.rowNum >= 1 AND u.rowNum <= 20

通过执行以下操作,我可以获得[冗长的选择查询]返回的记录数:

SELECT COUNT(*) AS numRecords from ([obscenely long select query]) AS records

我想尽可能有效地获得这两个记录集。

我能弄清楚该怎么做的唯一方法是将以上两个语句都放入一个存储过程中。由于某些原因,这使我感到效率低下:

  • 我必须写出两次[过长的选择查询],这使得解决方案难以维护/更改(如果可能的话,我 真的 想避免这种情况)。
  • 我必须运行[淫秽的长选择查询],获取所有可能的记录(可能是几千条),然后再将其缩减为合理的分页大小,而仅在获得计数时再次运行它。

我尝试过的其他解决方案:

  • 将[冗长的选择查询]放入其自己的存储过程中(这会导致语法错误)。

有什么可以做的吗?我应该只是吸收它并坚持使用当前的解决方案,还是有一种更优雅的方法来实现这一目标?


问题答案:

根据[obscenely long select query]结构的不同,您可能可以使用临时表或表变量:
-用匹配行的ID填充临时表
-计算临时表的行数以计算页数
-检索调用方构建的结果带有临时表和相关数据库表的查询




 类似资料:
  • 问题内容: 我搜索并没有找到解决该问题的Go解决方案,无论是否使用,都没有,也没有在其他任何站点上。 假设我们在Gogo中建模了一个MongoDB集合: 我们希望根据某些条件对用户进行排序和列出,但是由于预期结果列表较长,因此已实现了分页。 为了实现对某些查询结果的分页,MongoDB和驱动程序包以和的形式内置支持,例如: 但是,如果页数增加,这将变得很慢,因为MongoDB不能仅“神奇地”跳到结

  • 我需要找到一种算法来解决以下问题: 给出了一个区间列表(leftBound、RightBound),这是在此行为中对区间进行分组的最有效算法: 间隔:(1,4)、(6,9)、(1,3)、(4,8)、(6,9)、(2,7)、(10,15) 需要的解决方案: 组(2,3)包含(1,3), (1,4), (2,7) 组(6,8)包含(4,8), (6,9) 组(10,15)包含(10,15) 当然,有不

  • 我想在RESTful API中支持分页。 我的API方法应该通过返回产品的JSON列表http://localhost/products/v1/getproductsbycategory,可能有数千种产品,我想翻阅它们,因此我的请求应该如下所示:

  • 问题内容: 我正在尝试将一些SQL从MySQL转换为PostgreSQL。因此,我需要变量赋值: 您将如何使用PostgreSQL做到这一点?v9和v8(几乎相同)的文档中没有有用的示例。 问题答案: Postgres SQL中没有变量(只能在过程语言中使用变量)。 在查询中使用: 作为替代方案,您可以在说明的方式使用自定义的配置参数。 创建两个函数: 使用函数可以模拟变量,如示例中所示: 这当然

  • 字符串被正确插入,并且x坐标也被读取。这里出了什么问题?代码:

  • 我想在RESTful API中支持分页。 我的API方法应该通过返回产品的JSON列表。但是,可能有成千上万的产品,我想浏览它们,所以我的请求应该如下所示: 但我的JSON响应需要是什么样的呢?API使用者通常会在响应中期望分页元数据吗?还是只需要一系列产品?为什么? 看起来Twitter的API包含元数据:https://dev.twitter.com/docs/api/1/get/lists/