关于缓冲
查询和非缓冲查询
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 / /::返回一个结果集的每一次,就是一个数字的一维数组。