在mysql中使用PHP准备语句时,blob字段的检索速度很慢


Slow retrieval of blob field when using PHP prepared statements with mysqli

为了提高安全性,我实现了一个执行预处理语句的函数。

但是当我尝试获取base64编码的blob内容(约30-50KB)时,我遇到了问题。

如果我在不使用预处理语句的情况下运行查询,它运行得很快。

对于准备好的语句,它在调用:mysqli_stmt_fetch($statement)时停止并且运行大约需要一分钟或更长时间,最终返回结果。

一旦我摆脱mysqli_stmt_fetch($statement)调用或从我的选择查询中排除blob字段,事情就像往常一样快速运行。

我希望有人知道这里发生了什么。到目前为止,我一直在网上寻找答案,但几乎没有什么运气。

我会将二进制blob保存在MySQL以外的其他地方,在MySQL中保留一个简单的标识符,以便我知道从哪里获取它。MySQL从来不是存储大块二进制数据的首选方式。
至少它会解决你的问题,你可能应该尝试放弃base64的开销(它也增加了33%的大小)。

我想尝试的另一个解决方案是查看是否有最新版本的驱动程序或服务器。或者尝试不同的驱动程序,如PDO

第三种解决方案是尝试将字段类型从BLOB更改为TEXT, base64在正常ascii范围内。