mysqli_query中的最大查询长度

Cos*_*anu 2 php mysqli-multi-query

如何确定函数mysqli_multi_query(或mysqli_query)在PHP中收到的最大$ query参数?我有一个php程序,它生成一个由UPDATE sql命令组成的大字符串,用';'分隔 问题是,如果该字符串超过一定长度,mysqli_query会生成一个错误,例如"MySQL服务器已经消失".我注意到这个长度似乎大约是1MB,但我怎么能探测它以确保我永远不会超过这个长度?

该脚本需要在25个左右的字段上运行大约7000个更新.一次执行一个更新证明非常慢,连接多个更新的速度要快得多.

是否有可能更快地运行多个查询?

恭喜您的任何建议!

Kam*_*mil 5

你应该看看MySQL错误日志.

如果您无法访问计算机(托管等),您可以向管理员或帮助台询问该日志.

MySQL支持非常大的查询.我不确定是否有任何限制,但是当您使用网络时 - 您可能遇到数据包大小问题.

您可以检查--max_allowed_packetMySQL配置,并尝试设置更大的数据包大小.我不确定默认配置,但它可能是1MB,可能是太小的值,无法一次获得7000个更新的查询.

MySQL可能需要更多的RAM来处理这样的查询.

如果你无法重新配置MySQL,你必须以某种方式将大查询拆分为较小的查询.

您还可以阅读此内容以获取更多信息:

devshed - MySQL服务器已经消失了

您询问:

是否有可能更快地运行多个查询?

这个问题没有简单的答案.这取决于查询,数据库架构等.

在大多数情况下,配置文件中增加MySQL缓存大小可能会对大量简单更新与计算量不大有关,因为数据库引擎将在RAM内存上运行,而不是在硬盘上运行.当使用大缓存时 - 有时第一个大查询可能会更慢,因为数据尚未加载到RAM中,但是当它最终加载时 - 需要大量读/写操作的查询将更快地运行.

稍后添加: 我假设您的数据处理需要php deserialize()函数,这可能很难在纯SQL中实现,您必须在PHP中执行:)如果您有权访问服务器控制台,您可以创建cron(linux sheduler)作业,在晚上从shell调用PHP脚本.

稍后添加 在评论中讨论后我还有一个想法.您可以从phpmyadmin进行完整数据库或一个表备份,下载它,在家用计算机上恢复数据(在Windows上,您可以使用XAMPP,WAMP服务器).在家用计算机上,您可以运行mysql.exe并在本地处理数据.