本文演示了PHP操作系统中mysql操作缓冲区的使用,供大家参考:

有连接PHP MySQL,MySQL,mysqli,PDO的三种方式。无论哪种方式,你使用的连接,这两者之间是有区别的使用和不使用缓冲区缓冲区。

缓冲区的使用和不使用缓冲区有什么用

客户机和MySQL服务器执行查询操作。如果获得的数据量很大,查询结果在哪里

有两个地方要放置:客户机上的缓冲区和服务器端的缓冲区。

这里我们提到的缓冲区是指客户机的缓冲区。如果查询的结果已经从服务器恢复和放在客户端的缓冲区,我们称之为缓冲区。如果它仍然是存储在服务器端的缓存,我们说没有缓冲区(unbuffer)使用。

使用缓冲区和不使用缓冲区有什么区别

主要是在内存方面,使用缓冲区会增加客户端的内存压力。当返回数据的结果非常大时,它可能占用调用客户机(实际上是PHP进程)的更大的过程,而不是使用缓冲区自然会对服务器端带来更大的压力(这里是提供MySQL服务的服务器)。

具体参考:php查询mysql大数据量内存占用分析

PHP中的三种模式是如何设置缓冲区的使用的

MySQL的默认查询使用的缓冲区,并mysql_unbuffer_query需要不使用缓冲区的使用

的mysqli默认查询不使用缓冲区,并mysqli_store_result需要设置缓冲区

PDO的默认查询不使用缓冲区,并mysql_attr_use_buffered_query需要设置缓冲区

大致相关的代码如下所示:


< PHP
dbconfig美元=阵列(
主机= > '10.128.11.101,
港口= > '3306,
用户= >测试,
通过= >测试,
DB= >测试,
);
美元'select * so_topic_app语句;
/ / / / ---------- --------- MySQL
美元($ dbconfig mysql_connect分贝= { 'host},{用户dbconfig美元},{ }往dbconfig美元);
mysql_select_db($ dbconfig { 'db},为DB);
mysql_set_charset('utf8,$分贝);
缓冲区的使用
RES = mysql_query美元(美元美元的SQL,DB);
$ =数组();
而($行= mysql_fetch_row($ RES)){
$;
}
不要使用缓冲区
RES = mysql_unbuffered_query美元(美元美元的SQL,DB);
$ =数组();
而($行= mysql_fetch_row($ RES)){
$;
}
mysql_close($分贝);
/ / / / ---------- --------- mysqli
美元($ dbconfig mysqli_connect分贝= { 'host},{用户dbconfig美元},{ } dbconfig美元往,dbconfig美元{ 'db});
不使用缓冲 / / mysqli
结果= mysqli_query美元(美元$ SQL DB);
$ =数组();
而($行= $结果-> fetch_array()){
$;
}
缓冲/使用mysqli
结果= mysqli_query美元(美元美元dB,SQL,mysqli_store_result);
$ =数组();
而($行= $结果-> fetch_array()){
$;
}
mysqli_free_result($结果);
mysqli_close($分贝);
/ / / / --------- PDO ----------
DSN =MySQL美元:北京{ $ dbconfig { 'db} };主机= { { } } dbconfig美元'host ';
PDO =新的PDO(美元美元美元的DSN,dbconfig {用户},{dbconfig美元往});
不使用缓冲 / / PDO
美元美元支撑= PDO ->准备($ SQL);
支撑美元->执行();
$ =数组();
数据支撑美元美元-> fetchall();
缓冲/ PDO的使用
为PDO -> setAttribute(PDO::mysql_attr_use_buffered_query,真的);
美元美元支撑= PDO ->准备($ SQL);
支撑美元->执行();
$ =数组();
数据支撑美元美元-> fetchall();


跟进

当然,如果数据量很大,大多数人会考虑使用子批来提取和处理数据,所以实际上很少有需要注意和使用MySQL使用缓冲区或不使用缓冲区的场景。

希望本文能对大家的PHP程序设计有所帮助。