PHP / MySQL(i)use_result,store_result和MyISAM Table Locks

时间:2011-04-22 09:08:03

标签: php mysql performance myisam

我已阅读各种来源(例如thisthisthis),了解use_result()(无缓冲查询)与store_result()之间的区别(缓冲查询)并且还知道MySQL保持对数据的锁定(在整个表上的MyISAM的情况下),直到所有结果都被发送到客户端。

我不明白为什么使用use_result()(无缓冲)查询为什么MySQL比store_result()(缓冲)查询保持锁定的时间更长。为什么使用store_result()而不是使用use_result()并且自己进行缓冲(到PHP数组中)呢?

1 个答案:

答案 0 :(得分:2)

当使用store_result() mysql驱动程序(写在低于php的级别)时,会将数据从服务器传输到客户端并释放锁定。

当使用use_result()并在数组中缓冲时,你需要创建一个php循环,因为php是一个解释器,循环速度较慢,所以每次获取行之间都有一个延迟。

为了看到这个延迟,衡量执行时间的差异

for (i = 0; i < 100000; i++) {} 

phpc之间

一般来说,php代码比c代码慢,而php扩展和内部函数都是用c代码编写的,所以使用扩展或内部函数总是比在PHP代码中为同样的东西编写算法更快