【问题标题】:How to make PDO (pdo_pgsql) to lazily fetch rows如何使 PDO (pdo_pgsql) 懒惰地获取行
【发布时间】:2016-11-06 15:31:46
【问题描述】:

使用以下代码,即使我获取单行 - 下载整个数据集(需要几秒钟):

$query = 'SELECT * FROM xxx WHERE id > :position ORDER BY id';
$stmt = $db->prepare($query);

$stmt->execute([
    ':position' => $position,
]);

while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
    break;
}

我试图在 PDO 中找到一个选项,使其按需(或按合理的批次)获取行,但没有这样做,至少我在 PDO 文档中找不到它。

给定查询的 Postgresql 能够按照 EXPLAIN ANALYZE 提供 0.28ms 中的第一行。

我的目标是尽可能快地开始处理行,即使更多批次的行会带来一些网络开销。

我如何确定它获取所有行:

  1. 间接:在第一行之后break 需要相同的时间或遍历整个数据集
  2. 我使用tcpdump 捕获了流量,并检查了它是否获取了所有行。

那么,问题来了:是否可以让PDO以按需模式逐行(或一些合理的小批量)获取?

【问题讨论】:

标签: php postgresql pdo


【解决方案1】:

我找到了答案:

$stmt = $db->prepare($query, [\PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL]);

因此必须使用\PDO::CURSOR_SCROLL 选项创建语句

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多