PHP MySQL 正在传递大量查询,

PHP MySQL large quantity of queries being passed,

我有一个 PHP 脚本,可以非常快速地将大量查询传递给数据库。如果 MySQL 数据库无法以与传递它们相同的速度处理它们,那么它是否会在查询进入时将其排队,或者它们会丢失?

我的程序编写了句法正确的查询并将其传递给数据库,但数据库在表中包含的信息和表的数量方面远远落后。

一些示例代码(我对 PHP 有点陌生,所以我的 code/coding 风格可能很恐怖):

//If table has one primary key
        $val = $tblColPkArray[0]; 

        $pkInsert = ", PRIMARY KEY (". $val['COLUMN_NAME'] .")"; 
        $pkColName = $val['COLUMN_NAME'];

        $string = ltrim($string, ","); 

        $oneCreateTableQuery = $beginning . $string . $pkInsert . $end; 

        echo $oneCreateTableQuery . "\n"; 

        $newLink->query($oneCreateTableQuery); 

        $pkValuesInOld = "SELECT " . $pkColName . " FROM " . $tables . ";";

        $pkValsResult = $link->query($pkValuesInOld);

        while($pkValues = $pkValsResult->fetch(PDO::FETCH_ASSOC))
        {
            $pkRowValuesQuery = "SELECT * FROM " . $tables . " WHERE " . $pkColName . " = '" . $pkValues[$pkColName] . "';"; 

            echo $pkRowValuesQuery . "\n";

            $valsOfPkInOldTable = $link->query($pkRowValuesQuery); 

            while($pkVals = $valsOfPkInOldTable->fetch(PDO::FETCH_ASSOC))
            {
                //var_dump($ckVals); 

                $insertBeginning = "INSERT INTO " . $tables . "("; 
                $insertValuesSection = ") VALUES (";
                $insertEnd = ");";
                $keys = ""; 
                $rowValues = ""; 

                foreach($pkVals as $key => $value)
                {
                    $keys = $keys . ", " . $key; 
                    $rowValues = $rowValues . ", '" . $value . "'"; 
                }

                $insertStatement = $insertBeginning . ltrim($keys, ",") . $insertValuesSection . ltrim($rowValues, ",") . $insertEnd; 

                echo $insertStatement . "\n"; 

                $newLink->query($insertStatement);

            }//While loop: Inserting values of old table into new table via INSERT INTO statement 

            //unset();

        } //While loop: Selecting all values from old table based on PK values per table, pass result of that query to next while loop

您可以在单个查询中执行此操作,而不是调用多个插入语句。 例如,不是 运行这 3 个查询,

INSERT INTO table VALUES(1, 2);
INSERT INTO table VALUES(3, 4);
INSERT INTO table VALUES(5, 6);
...

您可以运行这个查询:

INSERT INTO table VALUES(1, 2), (3, 4), (5, 6), ...;

看起来你甚至可以结合插入和 SELECT:

INSERT INTO table (...)
    SELECT ... FROM ...;

此外,您的嵌套循环看起来可能有效:

INSERT INTO table (...)
    SELECT ... FROM ...
               JOIN ...;

这将减少 一次 调用 ->query() 并消除大部分代码。