当前位置: 首页 > 后端技术 > PHP

MySQL的缓冲和非缓冲查询

时间:2023-03-29 20:43:21 PHP

MySQL的Buffered和Unbufferedqueries今天我们就来进一步说说MySQL的querycache的高级功能,即querycache和querynon-cache!原因:(内存溢出警告)PHP致命错误:允许的内存大小为268435456字节耗尽1。官方主要是说缓存查询是一次性把所有的内容都找出来,放在内存中,越积越多;不是缓存查询然后直接从MySQL服务器一条一条返回,也就是等待php进程获取下一条数据。(明白这个意思就够了,想全懂微信或百度翻译)2.Buffer和unBuffer查询a)缓存查询一般用于一次性获取查询数据,会保存在内存中;b)Non-cachequery直接从MySQL中一个一个返回,不会存入内存;3.mysqli,pdo的非缓存查询示例query("SELECTNameFROMCity",MYSQLI_USE_RESULT);如果($result){while($row=$uresult->fetch_assoc()){echo$row['Name'].PHP_EOL;$uresult->close();##pdo$pdo=newPDO("mysql:host=localhost;dbname=world",'my_user','my_pass');$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,false);$uresult=$pdo->query("SELECTNameFROMCity");如果($result){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("世界");$uresult=mysql_unbuffered_query("SELECTNameFROMCity");如果($result){while($row=mysql_fetch_assoc($uresult)){echo$row['Name']。PHP_EOL;总结:这里的cachedquery和non-cachedquery其实就是在操作大量数据时导致内存溢出的cachedquery,此时可以使用non-cachedCachethequery来防止这种情况的发生,但是这个时候你要注意了,因为mysql会一直等待php程序获取数据,直到获取到所有数据,所以会消耗MySQL的性能,那么我们应该如何正确使用呢?至于他们,你要具体把握核心,内存溢出,MySQL性能消耗。这两个把握好,用在什么场景就知道了。如果您不知道如何使用它们,可以给我留言或推特!更多精彩内容尽在小而强大的公众号!