您好,欢迎访问一九零五行业门户网

MySQL中Buffered and Unbuffered queries及pdo的非缓存查询例子

mysql的buffered and unbuffered queries今天我们就进一步的来talk talk mysql的查询缓存的高级作用吧,也就是 查询缓存 和 查询非缓存!
起因:(内存溢出警告)
php fatal error: allowed memory size of 268 435 456 bytes exhausted
1.官方
主要说缓存查询是一下子把内容都查出来,放到内存里,会越积越多;而非缓存查询则直接一条一条从mysql服务器返回,也就是会等待着php进程来获取下一条数据。(主要了解这个意思就行,想要全了解的,微我或者百度翻译)
2.buffer and unbuffer query
a) 缓存查询一般是用于查询数据一次性获得,会存与内存中;
b) 非缓存查询是直接从mysql中一条一条的返回,不会存于内存中;
3.mysqli,pdo的非缓存查询例子
<?php##mysqli $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $uresult = $mysqli->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个把握得好,就知道用在什么场景了,如果还不知道怎么用的,可以留言或者微我!
相关文章:
how mysql ‘queries’ and ‘questions’ are measured
how to find and kill misbehaving mysql queries
相关视频:
韩顺平 2016年 最新mysql基础视频教程
以上就是mysql中buffered and unbuffered queries及pdo的非缓存查询例子的详细内容。
其它类似信息

推荐信息