2

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

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

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

感谢您的任何建议!

4

3 回答 3

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 并在本地处理数据。

于 2012-10-27T16:42:08.293 回答
0

我在 INSERT 语句中发现了 16 个字段/值对的限制。超过这个数字,我得到一个“禁止”错误。我在工作语句上的总 INSERT 语句长度为 392 个字符。

于 2015-03-04T17:37:03.560 回答
0

使用 for 循环来完成任何大量工作,只需使用常规 mysqli_query。我收到了超过 16000 个查询。php.ini 文件中的某些内容也必须更改。发布 mb 大小需要更改。如果您发送很多字符,请尽可能大。如果您发送许多不同的变量,也应该更改 var input max。使 php 内存大小更大。确保在运行查询时不会耗尽系统内存。如果您做对了所有事情,您可以发送超过 20000 个查询。将 php 内存设置为至少 256mb。如果您发送大量查询,有时您可能需要将超时时间从 30 和 60 增加到 200 或更高。如果您不更改任何设置,即使一切都是真的,您的帖子也会失败。如果您超出任何 php.ini 设置的限制/最大值,PHP 将使脚本条件为假。您不必一一更改任何 mysql 设置。如果您插入或更新超过 1000 个查询的任何内容,则需要一些时间。

于 2016-12-31T21:33:13.117 回答