美文网首页
MySQL缓冲查询和无缓冲查询

MySQL缓冲查询和无缓冲查询

作者: Do_you | 来源:发表于2018-03-12 00:00 被阅读0次

参考

http://php.net/manual/zh/mysqlinfo.concepts.buffering.php
http://php.net/manual/zh/mysqli.query.php
https://my.oschina.net/eechen/blog/591426?p=1
PHP MySQL查询(mysqli,pdo_mysql)默认使用缓冲模式.
也就是说查询结果将一次性从MySQL传输到PHP进程内存中,
这时可以统计结果集的行数,以及移动结果集指针.
缓冲模式下,如果结果集很大,那么PHP进程也会占用大量的内存,
直到结果集被unset或者free.
store_result也用于缓冲模式,所有结果一次性存储到PHP进程中:
mysqli::store_result
mysqli_stmt::store_result
如果PHP的MySQL数据库驱动底层用的是libmysqlclient,那么memory_limit不能统计到结果集占用的内存,
除非结果集已经赋值给PHP变量,如果底层使用mysqlnd作为驱动时则可以统计到(PHP从5.4开始默认底层默认使用mysqlnd).
无缓冲模式下执行的查询将会返回一个resource资源引用,位于MySQL查询结果等待PHP获取.
无缓冲模式下,PHP进程占用的内存很少,但会增大MySQL服务器的负载.
在PHP取回所有结果前,在当前数据库连接下不能发送其他的查询请求.
无缓冲查询简称use_result.
总结:
当结果集不大时,或者需要在读取所有行前获取结果集行数时,使用缓冲查询(默认).
当结果集很大时,使用无缓冲查询,避免PHP进程占用大量的内存.

$rs = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT);
$pdo->setAttribute(
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

相关文章

  • MySQL缓冲查询和无缓冲查询

    参考 http://php.net/manual/zh/mysqlinfo.concepts.buffering....

  • ClickHouse H3缓冲区查询

    背景     缓冲区查询是非常常见的空间查询,用来查询周边的信息。本文介绍了H3来进行缓冲区查询的方案。 H3简介...

  • MySQL 体系结构及存储引擎

    MySQL 体系结构 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲( Cach...

  • Mysql的架构-1

    mysql的组成部分 连接池组件 管理服务和工具组件 sql接口组件 查询分析器组件 优化器组件 缓冲组件 插件式...

  • 字节跳动后端面经七

    MySQL慢查询如何优化? InnDB存储引擎默认隔离级别,如何实现? InnoDb针对数据库缓冲池管理使用LRU...

  • oracle 多表查询优化

    ORACLE中的高速缓冲用于保存查询过的sql语句,单只对单表查询起作用 单表查询优化:写查询语句时尽量统一规范,...

  • Go基础语法(十)

    缓冲信道 之前看到的都是无缓冲信道,无缓冲信道的发送和接收过程是阻塞的。我们还可以创建一个有缓冲(Buffer)的...

  • Redis使用中的常见问题

    缓存穿透 缓存穿透指的是查询一个一定不存在的数据,由于不存在这个值,导致每次查询都会取DB上查询。 解决方案:缓冲...

  • 临时表空间作用

    Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。...

  • go的channel

    一 介绍 1 使用 无缓冲区 有缓冲区 2 结论 无缓冲:发送和接收动作是同时发生的。如果没有 goroutine...

网友评论

      本文标题:MySQL缓冲查询和无缓冲查询

      本文链接:https://www.haomeiwen.com/subject/khmbfftx.html