-1

我正在尝试构建一个为长时间运行的页面加载的进度条(是的索引是明显的解决方案,但目前数据集/模式禁止分区/正确索引)所以我计划在查询注释中使用 GUID/uniqueID 来跟踪使用 SHOW_FULL_PROCESSLIST 的进度通过 ajax - 但关键在于顺序查询是否由 php 按顺序执行,有人知道吗?

4

3 回答 3

3

MySQL 作为数据库服务器使用多个线程来处理多个正在运行的查询。它在收到来自客户端的查询(即 PHP 连接或 ODBC 连接等)时分配一个线程。

但是,既然您提到了 mysql_query,我认为您可能会想到两件事:

  1. 如果你多次调用 mysql_query() 来传递各种命令,那么 MySQL 将在前一个查询完全执行后传递每个查询并将结果返回给 PHP。因此,当然 MySQL 似乎会按顺序工作,尽管实际上是 PHP 正在等待向 MySQL 发送一个查询,直到一个查询完成。

  2. 在 MySQL5 和 PHP5 中,有一个名为 ( mysqli_multi_query()) 的函数,您可以使用它一次将多个查询传递给 MySQL,而无需 PHP 等待 1 个查询结束。该函数将在同一个结果对象中一次返回所有结果。MySQL 实际上将使用多个线程一次运行所有查询,并且在这种情况下等待时间大大减少,并且您还倾向于更好地使用可用的服务器资源,因为所有查询都将作为单独的线程运行。

于 2012-05-15T16:12:35.530 回答
1

正如巴贝奇曾经说过的那样,“我无法正确理解会引发这样一个问题的那种混乱的想法。” 对 的调用mysql_query,与对任何其他函数的调用一样,按照它们在程序流中到达的顺序执行。

于 2012-05-15T18:47:38.833 回答
0

文件中的顺序大多无关紧要。重要的是执行顺序。

<?php

    myCmdFour();
    myCmdTwo();
    myCmdThree();
    myCmdTwo();

    function myCmdTwo() {
        mysql_query(...);
    }

    function myCmdThree() {
        mysql_query(...);
    }

    function myCmdFour() {
        mysql_query(...);
    }

    myCmdFour();
    myCmdThree();
    myCmdTwo();
    myCmdTwo();
?>

尽管任何拥有类似 PHP 文件的人都需要认真重新考虑。

于 2012-05-15T19:20:25.327 回答