博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL的Buffered and Unbuffered queries
阅读量:6719 次
发布时间:2019-06-25

本文共 1515 字,大约阅读时间需要 5 分钟。

MySQL的Buffered and Unbuffered queries

今天我们就进一步的来talk talk MySQL的查询缓存的高级作用吧,也就是 查询缓存 和 查询非缓存!

起因:(内存溢出警告)

PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted

1.官方

clipboard.png

主要说缓存查询是一下子把内容都查出来,放到内存里,会越积越多;而非缓存查询则直接一条一条从MySQL服务器返回,也就是会等待着php进程来获取下一条数据。(主要了解这个意思就行,想要全了解的,微我或者百度翻译)

2.Buffer and unBuffer query

    a) 缓存查询一般是用于查询数据一次性获得,会存与内存中;

    b) 非缓存查询是直接从MySQL中一条一条的返回,不会存于内存中;

3.mysqli,pdo的非缓存查询例子

query("SELECT Name FROM City", MYSQLI_USE_RESULT); if ($uresult) { while ($row = $uresult->fetch_assoc()) { echo $row['Name'] . PHP_EOL; } } $uresult->close(); ##pdo $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } }##mysql 会被抛弃的,了解下即可 $conn = mysql_connect("localhost", "my_user", "my_pass"); $db = mysql_select_db("world"); $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) { while ($row = mysql_fetch_assoc($uresult)) { echo $row['Name'] . PHP_EOL; } }

总结:

    这里的缓存查询和非缓存查询,实际上就是缓存查询在操作大量数据的时候回造成内存的溢出,而此时就可以利用 非缓存查询 来防止这种情况的发生,但此时又得注意了,因为mysql会一直等待php程序来获取数据,直到数据全部获获取完毕,所以是会消耗MySQL的性能,那我们该如何正确使用它们呢,就得具体抓住核心,内存溢出,MySQL性能消耗,这2个把握得好,就知道用在什么场景了,如果还不知道怎么用的,可以留言或者微我!

更多精彩内容即在微小而强大的公众号里!

clipboard.png

转载地址:http://pdjmo.baihongyu.com/

你可能感兴趣的文章
你人生最重的枷锁是什么?
查看>>
MySQL学习(八)
查看>>
【转载】支持向量机(三)核函数
查看>>
K8s集群部署(一)------ETCD集群部署
查看>>
python 基本数据类型之整数和布尔值
查看>>
@font-face在vue中的使用
查看>>
MathType可以编辑带圈乘号吗
查看>>
Mac生成ssh key
查看>>
canvas绘图详解-05-线条的属性
查看>>
python socket通信案例
查看>>
第十章
查看>>
C++typedefine用法小结
查看>>
CSS3边框特效
查看>>
Cocos2D坐标系
查看>>
获取word中的原始大小图片
查看>>
en_java去重排序
查看>>
(一)单例模式详解
查看>>
使用MAT分析内存泄露
查看>>
Android 原始套接字
查看>>
javascript 数组、json连接
查看>>