PHP的缓冲查询和非缓冲查询到MySQL的比较

PHP的缓冲查询和非缓冲查询到MySQL的比较
关于缓冲查询和非缓冲查询

MySQL的客户机有两种类型的查询:

缓冲区查询:它将接收查询结果并将它们存储在客户机的缓存中,下一个获取行记录的请求仅从本地获得。

(1)优点:在结果集中移动当前行的指针很容易,因此很容易找到,因为结果是客户机。

(2)缺点:需要额外的内存来存储这些结果集,需要大量的内存。另外,在接收到所有结果之前,PHP中运行查询的函数将不会返回。

无缓冲的查询:它会限制你的访问在一个严格的顺序查询结果。但他不需要额外的内存来存储整个结果集,你可以开始处理显示数据线当MySQL服务器开始返回的值。当我们使用无缓冲的结果,我们必须使用mysql_fetch_row函数获取数据行,或者我们可以使用mysql_free_result函数在发送任何命令到服务器关闭结果集。

哪种类型的调查是好的最好的依据是具体情况。当结果集庞大时,没有缓冲查询可以节省大量的临时内存。当查询不进行排序时,PHP可以在MySQL数据库实际处理时获得第一个数据行。

缓存查询很容易找到,它可以提供一个全面的加速搜索。因为每一个查询都会被快速读取,MySQL将很快得到结果集并将其存储在内存中,而不是在处理PHP代码时保留查询。

另一个限制是没有缓冲区查询,您将无法发送任何命令到服务器直到所有数据行读取或结果集发布mysqli_free_result。
mysql缓冲查询和非缓冲查询

PHP MySQL查询(mysqli,pdo_mysql)默认使用默认缓冲区模式

也就是说,查询结果将立即从MySQL转移到PHP进程内存。

此时,可以计算结果集的行数和移动结果集的指针数。

在缓冲模式下,如果结果集是大的,那么PHP进程也将占用大量内存,

直到结果集是撤消或自由。

store_result作为缓冲模式,和所有的结果都存储在一个PHP进程:

Mysqli::查询mysqli_store_result
Mysqli::store_result
mysqli_stmt::store_result
如果PHP的MySQL数据库驱动程序是由底层的libmysqlclient驱动,然后memory_limit不能算内存的占用设置结果。

如果结果集被分配到PHP变量,如果基础mysqlnd作为驱动器,它可以计算(PHP使用mysqlnd默认情况下在底部5.4)。

在非缓冲模式下执行的查询将返回资源资源引用,查询结果将在MySQL中等待PHP获得。

如果没有缓冲模式,PHP进程占用的内存很少,但增加了MySQL服务器的负载。

在PHP获得所有结果之前,在当前数据库连接下,不能发送其他查询请求。

use_result表示无缓冲的查询:

Mysqli::查询mysqli_use_result
Mysqli::use_result
总结:

当结果集很小,或者在获得结果集行号之前需要读取所有内容,使用缓冲区查询(默认值)。

当结果集很大时,不使用缓冲查询来避免PHP进程中的大量内存。

RS =美元美元mysqli ->查询(选择*从城市
为PDO -> setAttribute(PDO::mysql_attr_use_buffered_query,假);
RS =美元美元PDO ->查询(SELECT * FROM市);
默认情况下,选择查询结果mysqli_stmt仍将对MySQL服务器,等待取检索记录逐一的PHP程序,这将降低性能的同时节省内存。

如果你需要处理的所有记录,你可以叫mysqli_stmt::store_result,并得到所有的结果返回给PHP程序一次。

减少MySQL服务器的负担,虽然会有更多的内存,但效率更高。

如果你的选择中找出多少条记录,你可以用mysqli_stmt得到它::num_rows美元。

属性只适用于mysqli_stmt::store_result方法执行时间提前,当所有的查询结果返回给PHP程序。

相比mysqli_result::num_rows美元不是没有这个限制。

近mysqli_stmt::::store_result free_result与mysqli_stmt:

支撑美元-> store_result();
echo语句-> num_rows;
支撑美元-> free_result();
mysqli_stmt::::mysqli_stmt store_result可以取更有效,但也需要明确地关闭mysqli_stmt::free_result。

你可以使用mysqli_stmt::get_result得到结果集对象的结果,然后mysqli_result::fetch_all获取查询结果数组:

结果=美元美元支撑-> get_result();
结果=结果->美元美元fetch_all(mysqli_assoc);
整理相关参数

Mysqli:: / /执行SQL查询并返回mysqli_result(选择、显示、描述对象操作)或真(其他业务),并没有返回false。以mysqli::关闭。
Mysqli:: / /预处理制备的SQL,返回语句对象成功,失败返回假。
mysqli_stmt:: / /执行SQL执行。与mysqli_stmt::关闭。
mysqli_stmt::store_result / /检索所有查询结果(选择、显示、描述、解释)PHP,可选。关掉mysqli_stmt::free_result。
mysqli_stmt: / /:bind_result结合结构产生的准备和执行的变量,然后输出或分配这些变量在mysqli_stmt::取。
mysqli_stmt取 / /::返回一个结果集的每个时间,分配到mysqli_stmt::绑定变量的bind_result。
mysqli_stmt: / /:get_result得到对象,然后调用mysqli_result::fetch_all可以返回结果集的阵列。mysqlnd可用。
mysqli_result::fetch_all / /返回结果集(mysqli_num(默认),mysqli_assoc,mysqli_both),具有mysqli_result::接近close.mysqlnd。
mysqli_result fetch_array / /::返回一个结果集的每一次,包括数字和关联数组一维数组。
mysqli_result fetch_assoc / /::返回一个结果集的每一次,即一维关联数组。
mysqli_result fetch_row / /::返回一个结果集的每一次,就是一个数字的一维数组。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部