文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>mysql_store_result()与mysql_use_result()的比较(zz)

mysql_store_result()与mysql_use_result()的比较(zz)

时间:2010-08-04  来源:axejonny

看得不大懂 原理:http://hi.baidu.com/pkugsis/blog/item/19b7c0bfb90b8b0018d81fe0.html

    函数mysql_store_result()与mysql_use_result()类似,它们都有连接处理程序参数,并返回结果集。但实际上两者间的 区别还是很大的。两个函数之间首要的区别在于从服务器上检索结果集的行。当调用时,mysql_store_result()立即检索所有的行,而 mysql_use_result()启动查询,但实际上并未获取任何行,mysql_store_result()假设随后会调用 mysql_fetch_row()检索记录。这些行检索的不同方法引起两者在其他方面的不同。本节加以比较,以便了解如何选择最适合应用程序的方法。

       当mysql_store_result()从服务器上检索结果集时,就提取了行,并为之分配内存,存储到客户机中,随后调用 mysql_fetch_row()就再也不会返回错误,因为它仅仅是把行脱离了已经保留结果集的数据结构。mysql_fetch_row()返回 NULL始终表示已经到达结果集的末端。相反,mysql_use_result()本身不检索任何行,而只是启动一个逐行的检索,就是说必须对每行调用 mysql_fetch_row()来自己完成。既然如此,虽然正常情况下,mysql_fetch_row()返回NULL仍然表示此时已到达结果集的 末端,但也可能表示在与服务器通信时发生错误。可通过调用mysql_errno()和mysql_error()将两者区分开来。

       与mysql_use_result()相比,mysql_store_result()有着较高的内存和处理需求,因为是在客户机上维护整个结果集,所 以内存分配和创建数据结构的耗费是非常巨大的,要冒着溢出内存的危险来检索大型结果集,如果想一次检索多个行,可用 mysql_use_result()。mysql_use_result()有着较低的内存需求,因为只需给每次处理的单行分配足够的空间。这样速度就 较快,因为不必为结果集建立复杂的数据结构。另一方面,mysql_use_result()把较大的负载加到了服务器上,它必须保留结果集中的行,直到 客户机看起来适合检索所有的行。这就使某些类型的客户机程序不适用mysql_use_result():

■在用户的请求下提前逐行进行的交互式客户机程序(不必仅仅因为用户需要喝杯咖啡而让服务器等待发送下一行)。

■在行检索之间做了许多处理的客户机程序。在所有这些情况下,客户机程序都不能很快检索结果集的所有行,它限制了服务器,并对其他客户机程序产生负面的影响,因为检索数据的表在查询过程中是读锁定的。要更新表的客户机或要插入行的任何客户机程序都被阻塞。


有人做的实验: http://topic.csdn.net/u/20080306/13/58c639e1-9215-4b6a-92f3-b4cd154ef022.html

mysql_use_result与mysql_store_result服务器端内存使用情况的测试结果 
 
10000000数万,每行100Byte左右,InnoDB引擎
Linux服务器内存1G
在测试这两个程序时,没有其它的程序执行

mysql_use_result:

在执行到mysql_use_result时,服务端内存使用情况没有什么变化,
待继续往下执行到mysql_fetch_row时,服务器端的内存使用急剧上升,
剩余物理内存只有几K或几十K,查看Linux缓存有900M左右,待程序正常结束退出后,
缓存没有释放,仍只剩下几十K物理内存


mysql_store_result:

在执行到mysql_use_store时,服务器端的内存使用没有变化
说明store是不占用服务端内存的
但是客户端的内存是急剧上升的,待执行完mysql_free_result后客户端内存被释放

使用mysql_use_result占用服务器端内存,和查询高速缓存应该是没有关系的,
因为我加上SQL_NO_CACHE的结果是一样的
为何mysql_use_result是在mysql_fetch_row时才开始占用内存呢?


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载