- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当 Sebastien 说他在每次使用 mysqli_multi_query()
@ Can mysqli_multi_query do UPDATE statements? 之间断开连接并重新连接时,我感到畏缩。因为这似乎不是最佳实践。
然而,克雷格@mysqli multi_query followed by query在他的案例中指出,在每次使用 mysqli_multi_query()
之间断开连接和重新连接比使用 mysqli_next_result()
更快。
我想问一下是否有人有进一步的第一手知识或基准证据来建议程序员应该选择“新连接”与“下一个结果”方法的近似“截止”(基于查询量或其他) .
我也很高兴听到任何/所有与速度无关的问题。 Craig 使用连接函数对速度有影响吗?
Craig 的 while 语句是否有速度差异:
while ($mysqli->next_result()) {;}
- 与 -
我建议的 while 语句:
while(mysqli_more_results($mysqli) && mysqli_next_result($mysqli));
- 与 -
在第一次运行 multi_query
之前,为每个预期的 multi_query 创建一个新连接。我刚刚测试了这个,两个 mysqli_multi_query()
没有错误 = 不需要 close()
:
$mysqli1=mysqli_connect("$host","$user","$pass","$db");
$mysqli2=mysqli_connect("$host","$user","$pass","$db");
- 与 -
在每个 mysqli_multi_query()
之间打开和关闭,例如 Sebastien 和 Craig:
$mysqli = newSQL();
$mysqli->multi_query($multiUpdates);
$mysqli->close();
- 与 -
有人有其他选择来测试吗?
最佳答案
这不是 next_result()
的错,而是查询本身。您的代码运行所需的时间取决于实际查询执行所需的时间。
虽然 mysqli_multi_query()
返回控制的速度非常快,这并不意味着所有的查询都在那时执行了。恰恰相反,到 mysqli_multi_query ()
完成,只有第一个查询被执行。 而所有其他查询都在 mysql 端排队等待异步执行。
由此您可以得出结论,next_result()
调用本身不会添加任何超时 - 它只是在等待下一个查询完成。如果查询本身需要时间,那么 next_result()
也必须等待。
知道您已经知道选择哪种方式:如果您不关心结果,您可能只是关闭连接。但实际上,它只是在扫地毯下的污垢,将所有缓慢的查询留在原地。因此,最好保留 next_result()
循环(尤其是因为无论如何您都必须检查错误/受影响的行/等等)但加快查询本身。
因此,事实证明,要解决 next_result()
的问题,您必须实际解决查询速度的常规问题。因此,这里有一些建议:
说到Craig的案例,它很像已知的innodb写入速度问题。默认情况下,innodb 引擎设置为非常谨慎的模式,在引擎确保前一个成功完成之前,不会执行后续写入。因此,它使写入速度非常慢(大约只有 10 个查询/秒)。常见的解决方法是一次进行所有写入。对于插入查询,有很多方法:
虽然仅更新和删除事务仍然是可靠的方式。因此,作为一种通用解决方案,可以提供这样的解决方法
$multiSQL = "BEGIN;{$multiSQL}COMMIT;";
$mysqli->multi_query($multiSQL);
while ($mysqli->next_result()) {/* check results here */}
如果它在您的情况下不起作用/不适用,那么我建议为循环中运行的单个查询更改 mysqli_multi_query()
,调查并优化速度,然后返回多查询。
关于php - 速度/最佳实践刷新 mysqli_multi_query(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531943/
我正在执行 mysqli_multi_query(),其中包含 2 个查询: UPDATE Customers SET balance = balance + 15 WHERE ck
我正在通过 php 脚本更新 mysql 数据。我希望使用 mysqli_multi_query() 而不是 mysql_query。我要执行 N 个更新查询。请建议多查询是否有助于缩短执行时间。 A
我确信这个问题甚至在这个类(class)的创建者的博客上都没有问过。 从早上开始我就开始使用 bennettstone 的 php 数据库类.我试图将 MYSQLI_MULTI_QUERY 添加到此类
我在使用 mysqli_multi_query 时遇到问题。我可以多次INSERT INTO,但是一旦包含DELETE,所有后续查询都将不起作用。有趣的是,当将此查询粘贴到 phpMyAdmin SQ
只是想知道函数 mysqli_multi_query 是否仅连接到数据库一次或每个查询? 最佳答案 是的,因为它使用 $link 作为连接 ID http://php.net/manual/en/my
我在 mysqli_multi_query 的帮助下触发了以下查询。哪个执行正确但没有返回任何值。它返回空白。 mysqli_multi_query 有什么问题,或者是否有任何替代方法可以在 code
我正在对 PHP 执行 ajax 调用,它应该执行 2 个 SQL 查询。查询如下所示: $sql = "UPDATE customers SET customers_newsletter=1 WHE
$databases = array(); $path = '/Path/To/Directory'; $main_link = mysqli_connect('localhost', 'USERNA
使用 SO 上其他地方的示例来更好地捕获“隐藏”错误。虽然下面的代码将捕获并返回错误,但是否可以改进它以报告发生错误的查询? 使用下面的代码,输出是: Columns: 18 Error: You h
我正在尝试在下面的代码中使用 mysqli_multi_query 函数,但遇到了这个错误: 命令不同步;你现在不能运行这个命令 // add call stats to incoming nodes
我一直在尝试执行多个查询,因此我寻找了一种更好的方法来执行此操作,并且我在 php 中阅读了mysqli_multi_query。 我自己尝试了一下看看结果,但它一直给我错误。代码如下: $studi
我正在为我的 Android 应用程序创建 PHP API,该应用程序将用于扫描 QR 码。该 API 的一部分是检查扫描的代码是否有效并且可以在某个时刻进行扫描。 整个检查部分是MariaDB数据库
我以前从未使用过 mysqli_multi_query,它让我难以置信,我在网上找到的任何示例都无法帮助我准确地弄清楚我想要做什么。 这是我的代码: ">
我正在尝试提交 mysql 多重查询,但我不能... 当mysqli_multi_query“查询”有多个查询时无法提交。但是,当 mysqli_multi_query“查询”具有唯一查询时,它会被正
我正在运行多个 UPDATE SQL 查询: $queriesRun = mysqli_multi_query($connection, $queries); 现在,我如何循环遍历结果以了解哪些查询成
我在脚本的多个实例中使用了mysqli_multi_query()的程序版本。每次我使用这个函数时,它都会破坏我通过mysqli_connect()获得的连接。 这对我的 mysqli_insert_
我正在尝试使用 mysqli_multi_query() 从多个表中获取所有了解“Photoshop”的用户及其所有详细信息。我也得到了结果,但是也有一些不速之客以及正确的结果是空的。他们为什么会在这
我正在尝试删除我的主表“eleve”,同时删除主键在此的其他表。我尝试了所附代码,但出现错误: (Erreur de syntaxe pr�s de 'from bource where ID_BOU
我正在尝试做一个 mysqli_multi_query。由于某种原因,它不会工作。这是我到目前为止所做的: orderid 由ajax 给出。 最佳答案 查询必须用;分隔。 $sql = "INSE
我正在使用这段代码: $mysqli = new mysqli(...); $sql = file_get_contents("my_sql_file.sql"); $result = $mysqli
我是一名优秀的程序员,十分优秀!