php - mysqli_query 中的最大查询长度

标签 php mysqli-multi-query

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

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

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

感谢您的任何建议!

最佳答案

你应该看看 MySQL 错误日志。

如果您无权访问机器(托管等),您可以向您的管理员或帮助台索取该日志。

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

您可以检查MySQL配置中的--max_allowed_pa​​cket,并尝试设置更大的数据包大小。我不确定默认配置,但它可能是 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/

相关文章:

php - 如何在 symfony 中比较 Doctrine 和 Propel

php - 将 php 数组转换为 SQL 数组

php - 使用 mysqli_multi_query 和事务运行多个查询

PHP MySQL,IF EXISTS 更新 ELSE 插入,似乎不起作用

php - "Commands out of sync; you can' t 现在运行此命令”- 由 mysqli::multi_query 引起

php - mysqli_multi_query - 命令不同步;你现在不能运行这个命令

php - Composer 自动加载文件夹中的多个文件

php - Azure 表存储 Rest API

php - SQlite 3 PDO 语句在 PHP 中失败