rownum / 获取前 n 行

2024-03-10

select * from Schem.Customer 
  where cust='20' and cust_id >= '890127'
  and rownum between 1 and 2 order by cust, cust_id;

执行时间约2分10秒

   select * from Schem.Customer where cust='20' 
   and cust_id >= '890127' 
   order by cust, cust_id fetch first 2 rows only ;

执行时间约 00.069 ms

执行时间有很大差异,但结果是相同的。我的团队不会采用后来的一种。别问为什么。

那么 Rownum 和 fetch 前 2 行有什么区别,我应该做什么来改进或说服任何人采用。

数据库管理系统:DB2 LUW


尽管两个 SQL 最终都会给出相同的结果集,但这只发生在您的数据上。结果集很有可能会有所不同。让我解释一下原因。

我会让你的 SQL 更简单一些,以便于理解:

SELECT * FROM customer
WHERE ROWNUM BETWEEN 1 AND 2;

在此 SQL 中,您只需要第一行和第二行。没关系。 DB2 将优化您的查询,并且永远不会查找超出第 2 行的行。因为只有前 2 行qualify您的查询。

然后你添加ORDER BY clause:

SELECT * FROM customer
WHERE ROWNUM BETWEEN 1 AND 2;
ORDER BY cust, cust_id;

在本例中,DB2 首先获取 2 行,然后按 cust 和 cust_id 对它们进行排序。然后发送给客户(您)。到目前为止,一切都很好。但是,如果您想先按 cust 和 cust_id 排序,然后请求前 2 行怎么办?他们之间有很大的区别。

这是本例的简化 SQL:

SELECT * FROM customer
ORDER BY cust, cust_id
FETCH FIRST 2 ROWS ONLY;

在此 SQL 中,所有行都符合查询条件,因此 DB2 获取所有行,然后对它们进行排序,然后将前 2 行发送到客户端。

在您的情况下,两个查询给出相同的结果,因为前 2 行已按 cust 和 cust_id 排序。但如果前 2 行具有不同的 cust 和 cust_id 值,则它将不起作用。

关于这一点的一个提示是FETCH FIRST n ROWS comes afterorder by,这意味着 DB2 对结果进行排序,然后检索前 n 行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rownum / 获取前 n 行 的相关文章

随机推荐

  • 无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器

    我在访问某些控制器时遇到一个小问题 当我发送请求至 我得到一个 HTTP 404 同样的movies path package com emo server Configuration ComponentScan com emo serve
  • 从电子邮件文本中解析“发件人”地址

    我正在尝试从电子邮件的纯文本记录中提取电子邮件地址 我拼凑了一些代码来查找地址本身 但我不知道如何让它区分它们 现在它只是输出文件中的所有电子邮件地址 我想让它只吐出以 发件人 和一些通配符开头 并以 gt 结尾的地址 因为电子邮件设置为
  • 查找第二个 vlookup 值

    我在工作表 SKU DATA 的单元格 J2 中有以下 vlookup 公式 VLOOKUP A2 DUPLICATE C AJ 34 0 但是 在 重复 工作表范围的第 34 列中 有 2 个可能的结果 最多只有 2 个结果 Vlooku
  • $.post() 没有时间运行?

    我试图在提交表单之前将数据从表单发送到外部脚本 但我似乎无法让数据到达外部脚本 除非我return false 在表格本身上 document ready function Handle Form Submission mainForm s
  • 无法在 Mac OSX 上使用 gtk3 FileChooser?

    我将使用 gtk 3 0 构建的程序从 Linux 迁移到 Mac OS X 10 6 8 而且我编译的程序没有错误 但是 在启动程序并选择打开文件后 终端显示以下消息 GLib GIO CRITICAL Settings schema o
  • 在我的 Mac 上安装 python 包(ffnet、spacepy)时找不到 -lbundle1.o 的库

    我在我的 mac 10 9 上安装了 anaconda python 发行版 我正在尝试安装ffnet http ffnet sourceforge net包和SpacePy http spacepy lanl gov包 但这样做时遇到麻烦
  • vl_dsift 尝试获取每个像素的特征向量

    我正在尝试使用 vl dsift 获取每个像素的 128 1 特征向量 因此我希望得到的矩阵具有大小 128 像素数 然而 当我在尺寸为 192 168 的图像上使用它时 生成的描述符给出尺寸 128 31 185 binsize 为 1
  • Designer 在加载/卸载时由 Visual Studio 添加然后删除

    有人以前见过这个吗 我有一个大型 Visual Studio 项目 不断添加 Subtype Designer Subtype to my vcproj然后在项目的下一次打开和关闭时将其删除 中只定义了一个类StoredImageContr
  • 实体框架设计器中的空白字符串默认值

    是否可以在实体框架的 EDMX 设计器中分配一个空白字符串 即 作为默认值 我发现的唯一技术是使用文本编辑器手动编辑 edmx 文件 我意识到这是一个非常古老的问题 但为了后代的缘故 在 EF4 设计器中 您可以在属性窗口字段中键入一个空格
  • 在 Swift 中创建 JSON 数组

    我的后端需要以下 JSON 正文 number 561310 number 132333 number 561310 当我像这样输入时 它在 Postman 中运行得非常好 如何使用 Swift 创建类似的 JSON 现在我有一个字符串类型
  • 304 If-None-Match有效时未修改

    我正在优化 Express JSON API 以供 iOS 和 Android 应用程序使用 当应用程序在 If None Match 标头中指定 etag 时 似乎无法让 Express 使用正确的 304 标头进行响应 我不需要设置 E
  • 在android中解析简单的json字符串

    我想使用 json 创建一个登录和注册系统 我想首先获取 url 的内容 然后解析 json 字符串 Json 字符串示例 employee mesg username is exsist id 0 name 0 username 0 em
  • 用于换行的 CSS 选择器

    假设我有一些相邻的元素 div class container div 1 div div 2 div div 3 div div 4 div div 5 div div 6 div div 样式如下 container gt div di
  • 我可以在 Cordova 2.5 上多次监听 deviceready 吗?

    我可以为每个 html 页面注册 deviceready 事件吗 我使用 Cordova 2 5 的初始化代码并且工作正常 当我将这些代码复制到新的html文件时 它总是调用index html的initialize 函数 var app
  • 使用 Youtube API v3 从特定频道搜索视频

    在我的项目中 我尝试使用特定频道中的关键字进行搜索查询 在 Youtube API v3 的文档中 他们说要在特定频道中搜索 您需要将channelId放入查询中 但它似乎不起作用 现在 我正在使用 YouTube Direct Lite
  • 将 Java PriorityQueue 更改为最大 PQ [重复]

    这个问题在这里已经有答案了 Java 标准库中的优先级队列实现似乎是一个最小优先级队列 我发现这有点令人困惑 为了将其变成最大的 我创建了一个自定义比较器对象 Comparator
  • Gradle 同步错误:未找到名称为“default”的配置

    我想添加外部库GuillotineMenu Android https github com Yalantis GuillotineMenu Android在我的应用程序中 我按照现有问题的得票最高的答案中给出的步骤进行操作如何将库项目添加
  • 在 WordPress 页面和帖子中插入 PHP 代码

    我想知道visitor使用 PHP 的国家并将其显示在 WordPress 页面上 但是当我将 PHP 代码添加到 WordPress 页面或发布时 它会出现错误 我们如何在 WordPress 页面和帖子上添加 PHP 代码
  • 类型错误:尝试分配给只读属性。在 iOS8 Safari 上的 Angularjs 应用程序中

    我们的移动应用程序收到 TypeError 尝试分配给只读属性 仅在 IOS 8 上 堆栈跟踪没有帮助 并且似乎在 Angular 代码中 发生这种情况可能是因为 Angularjs 代码顶层的 use strict 我的问题是 1 为什么
  • rownum / 获取前 n 行

    select from Schem Customer where cust 20 and cust id gt 890127 and rownum between 1 and 2 order by cust cust id 执行时间约2分1