【问题标题】:Is there a way to make a SQL query that returns as much data as possible on a given time?有没有办法让 SQL 查询在给定时间返回尽可能多的数据?
【发布时间】:2021-12-30 07:26:16
【问题描述】:

我正在创建一个脚本,该脚本从 i Series/AS400 服务器 (DB2) 获取大量数据,然后将其发送到 kafka 主题。但是查询花费了太多时间(2 到 3m)来返回结果,有时我会遇到超时错误。

所以,我想知道是否有办法让 SQL 查询在给定时间返回尽可能多的数据,并防止我收到 SQL 错误(如超时)?

例如:

SELECT id, user, email 
FROM users 
DURING 10s;

它会在 10 秒内选择尽可能多的用户然后停止,并返回结果?所以我可以继续同步获取数据并发送到 Kafka?

【问题讨论】:

  • 简短回答:“不。”更长的答案:您正在使用什么 RDBMS,您想通过这样做解决什么问题?这感觉就像XY Problem
  • 你想达到什么目的?您不能在查询中指定时间。如果您需要 9 秒来建立连接怎么办?如果您想在 10 秒内停止尽可能多的行,那么您可以在客户端代码中实现这一点
  • 你不能为所欲为。你想做什么?需要更多细节。表中有多少行,表是静态的还是不断写入的?我猜 id 是唯一的?

标签: sql database db2


【解决方案1】:

您可以使用小页面大小(1k-10k 行?)实现分页。为了获得理想的结果,您的查询应满足三个条件:

  1. 查询需要支持流水线。
  2. 查询应包含ORDER BY 子句。
  3. ORDER BY 子句应使用唯一键来实现键集分页

现在,条件 #2 和 #3 是正确结果所必需的(页面之间没有丢失/重复的行)。条件#1 是非常可取的,但不是绝对必要的;如果您的查询不符合它,那么每次分页调用都会很昂贵,并且可能会超时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多