【问题标题】:How MySQL client and PDO receive big result with fetch methodMySQL 客户端和 PDO 如何使用 fetch 方法接收大结果
【发布时间】:2013-07-03 16:58:26
【问题描述】:

如果我有一张大桌子(1M 行)

我发送一个 SELECT * FROM 表(没有任何限制,其中...)

  • 我使用 PDO 准备查询
  • 我使用 只有一个 PDO::fetch 方法(不是 fetchAll)获取我的结果

mysql 通信层发生了什么?

1) mysql 服务器是否将所有行发送到 mysql 客户端,而 mysql 客户端将第一行发送到 PHP? (所以在PHP服务器和MySQL服务器上使用了很多内存)

2) mysql 客户端是否只从 mysql 服务器获取网络上的一行? (所以大量内存只用在 MySQL 服务器上)

(php 5.3.3 和 libmysqlclient1.6)

【问题讨论】:

  • 你用 mysql 做 1 m 行?
  • PDOStatement::fetch — 从结果集中获取下一行
  • 什么问题?我已经使用了将近 1G 行的 mysql...
  • Zod,您的链接超出主题 ^^ 我不是在谈论优化 MySQL 查询(我实际上知道怎么做,阅读查询计划...),而是如何将数据发送到带有 PDO::Fetch 方法的 MySQL 客户端

标签: mysql memory pdo client fetch


【解决方案1】:

这取决于您选择的缓冲模式和 mysql 客户端版本。在您的情况下,数据将在 mysql 服务器端使用。

Buffered and Unbuffered queries

【讨论】:

  • 不,它不会,但链接确实是一个好链接。 “因为缓冲查询是默认的......”所以默认情况下,数据被发送到客户端驱动程序以保留服务器端内存使用情况
  • 我做了,第一行:“查询默认使用缓冲模式。这意味着查询结果会立即从 MySQL 服务器传输到 PHP,然后保存在 PHP 进程的内存中” .这意味着数据存储在mysql CLIENT而不是服务器端......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2018-01-19
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多