PHP/MySQL(i) use_result、store_result 和 MyISAM 表锁

标签 php mysql performance myisam

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

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

最佳答案

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

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

为了看到这个延迟测量执行所花费的时间差

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

phpc 之间>

一般来说,php 代码比 c 代码慢,而 php 扩展和内部函数是用 c 代码编写的,所以使用扩展或内部函数总是比用 php 代码编写相同的算法更快

关于PHP/MySQL(i) use_result、store_result 和 MyISAM 表锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753948/

相关文章:

arrays - 当数组更快时为什么要使用列表?

php - 生成带有两个标记的静态 map 图像,中间有一条弧线,服务器端

mysql - 使用 SQL 进行分组并保留初始记录

javascript - Reactjs:更新特定行

mysql - 数据库的自动时间戳新条目(phpMyAdmin)

php - Yii2 - ActiveRecord - 类型转换

mysql - 为什么使用 cassandra 而不是 mysql 的 nosql?

PHP如何将\n转换为换行符

php - 自动记录PHP中的所有错误,警告和通知

javascript - 将php数据输出到jquery数组中?