如何确定 PHP 中函数 mysqli_multi_query(或 mysqli_query)接收的最大 $query 参数? 我有一个 php 程序,它生成一个由更新 sql 命令组成的大字符串,由“;”分隔问题是,如果该字符串超过一定长度,mysqli_query 会生成类似“MySQL 服务器已消失”的错误。我注意到该长度似乎在 1MB 左右,但我该如何探测才能确保我永远不会超过该长度?
脚本需要在 25 个左右的字段上运行大约 7000 个更新。一次执行一个更新被证明非常慢,连接多个更新运行得更快。
是否有可能更快地运行多个查询?
感谢您的任何建议!
最佳答案
你应该看看 MySQL 错误日志。
如果您无权访问机器(托管等),您可以向您的管理员或帮助台索取该日志。
MySQL 支持非常大的查询。我不确定是否有任何限制,但是当您使用网络时 - 您可能会遇到数据包大小的问题。
您可以检查MySQL配置中的--max_allowed_packet
,并尝试设置更大的数据包大小。我不确定默认配置,但它可能是 1MB,这个值可能太小而无法一次获得 7000 个更新的查询。
MySQL 可能需要更多 RAM 来处理这样的查询。
如果您不能重新配置 MySQL,您必须以某种方式将您的大查询拆分为较小的查询。
您还可以阅读此内容以获取更多信息:
devshed - MySQL server has gone away
你问:
Any possibility to run multiple queries even faster?
这个问题没有简单的答案。这取决于查询、数据库架构等。
在大多数情况下,增加配置文件中的 MySQL 缓存大小可能会有很大帮助,因为数据库引擎将在 RAM 内存上运行,而不是在硬盘上运行。使用大缓存时 - 有时第一个大查询可能会比较慢,因为数据尚未加载到 RAM 中,但当它最终加载时 - 需要大量读/写操作的查询将运行得更快。
稍后添加: 我假设你的数据处理需要 php deserialize() 函数,这可能很难在纯 SQL 中实现,你必须在 PHP 中完成:) 如果你可以访问服务器控制台,你可以创建 cron(linux sheduler)作业,调用 PHP夜间来自 shell 的脚本。
稍后添加 在评论中讨论后,我又有了一个想法。您可以从 phpmyadmin 制作完整的数据库或一个表备份,下载它,在家用计算机上恢复数据(在 Windows 上您可以使用 XAMPP,WAMP 服务器)。在您的家庭计算机上,您可以运行 mysql.exe 并在本地处理数据。
关于php - mysqli_query 中的最大查询长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101747/