-2

MySQL 无缓冲查询真的完全不使用 PHP 缓冲吗?在 PHP 访问数据之前,缓冲查询真的缓冲了整个结果集吗?

从我读到的关于 MySQL 缓冲查询的内容来看,这不是我想要的,因为我想立即开始处理结果,而不必在开始之前等待所有结果都被缓冲。但是从我读到的关于无缓冲查询的内容来看,这也不是我想要的,因为我确实希望它缓冲客户端上的结果,这样 MySQL 就不会被搁置更长的时间,我只是不这样做'在我开始处理结果之前,不希望它等待结果完全缓冲。所以帮助我理解。

在允许 PHP 开始使用结果之前,MySQL/PHP 中的缓冲查询是否真的缓冲了整个结果集?并且无缓冲查询真的完全不使用缓冲,以便 MySQL 服务器在将下一个结果发送到客户端之前不断等待 PHP 请求下一个结果吗?如果这是真的,为什么没有办法立即开始使用结果,但仍然缓冲结果以减轻 MySQL 的负载?

我的 MySQL 服务器是具有许多不同客户端节点的共享服务器。所以在客户端不使用缓冲是没有意义的。但是查询很大,因此它们不需要等待返回整个结果集即可开始使用结果。

那我理解对了吗?没有办法在这里做我想做的事吗?没有办法以实际的方式处理这个问题吗?

4

1 回答 1

1

我确实希望它缓冲客户端上的结果,这样 MySQL 的等待时间就不会超过它必须的时间

MySQL 非常有能力处理同时连接——实际上,来自这些同时连接的同时操作。也就是说,几乎是 RDBMS存在的主要理由之一。

为了防止同时操作作用于相同的底层数据时发生冲突,MySQL 会不时“锁定”数据库的部分内容以独占使用一个连接;但是,一旦它开始向客户端传输结果,为执行该语句而获得的任何锁都将已被释放。因此 MySQL永远不会被不立即将整个结果集加载到缓冲区中的客户端“阻止”。

所以,关于你的具体问题:

  1. 在允许 PHP 开始使用结果之前,MySQL/PHP 中的缓冲查询是否真的缓冲了整个结果集?

    是的。

  2. 并且无缓冲查询真的完全不使用缓冲,以便 MySQL 服务器在将下一个结果发送到客户端之前不断等待 PHP 请求下一个结果吗?

    差不多。MySQL 客户端库(C 语言)将执行一些缓冲,但只是为了有效地执行网络操作。

  3. 如果这是真的,为什么没有办法立即开始使用结果,但仍然缓冲结果以减轻 MySQL 的负载?

    无缓冲查询对 MySQL 的“负载”非常小——当然,它必须保持连接打开并将结果集保存在内存中,但这很少是一个非常大的问题。

于 2015-03-11T04:11:47.317 回答