php - 将记录从表复制到另一个表时提高性能

标签 php mysql performance copy records

嗨,伙计们:)我需要创建一个 php 代码来处理存储在数据库中的一些 worker 数据。我得到了想要的结果,但它需要几秒钟和几秒钟(几秒钟和几秒钟!>.<)才能完成,所以恐怕我没有以正确的方式做某事:(

worker 的数据存储在mysql表(table1)中,如下所示:

enter image description here

我得到了一对日期:initial_date (a) 和 final_date (b),所以我的目标是将给定 worker 的数据复制到一个新的表(table2),一天一天从a到b。预期的表格应该如下图(这个表格后面会作为进一步操作的依据,不属于问题的一部分)

enter image description here

要求覆盖 a 和 b 日期之间的任何现有数据,并“跳转”周末和假期。

为了实现我的目标,我正在对此进行编码(假设已完成连接和所有操作,并提供了 checkworkingday 函数):

$initialdate = '2016-10-10';
$finaldate = '2016-10-12';

$x = $initialdate;

do {
    if (checkworkingday($x) == true) {
    $query = mysqli_query($connection,"SELECT name,task FROM table1");
    while($row = mysqli_fetch_array($query)) {
        $task = $row['task'];
        $worker = $row['name'];
        $query2 = mysqli_query($connection,"SELECT task FROM table2 WHERE name = '$worker' AND date = '$x'");
        $row2 = mysqli_fetch_array($query2);
        $existingtask = $row2['task'];
        if (!isset($existingtask)) {
            mysqli_query($connection,"INSERT INTO table2 (date,name,task) VALUES('".$x."','".$worker."','".$task."')");
        } else {
            mysqli_query($connection,"UPDATE table2 SET task = '".$task."' WHERE date = '".$x."' AND worker = '".$name."'");
        }
    }
    }
    $x = date('Y-m-d', strtotime($x . "+1 day"));
} while ($x <= $finaldate);

如示例所示仅3天,需要很长时间才能结束;并且持续数周或数月需要非常非常长的时间(甚至超过最大执行时间,具体取决于日期范围!)。

我是新手,我知道代码很“土气”,但我已经修改并检查了代码和信息,但没有获得更好的性能。我究竟做错了什么?谢谢:)

最佳答案

尝试INSERT.. SELECT,而不是循环遍历整个数据:

INSERT INTO table2 (date,name,task)
SELECT date,name,task 
FROM Table1
WHERE < >;

关于php - 将记录从表复制到另一个表时提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943262/

相关文章:

php - 哪一列匹配?

php - WP插件中的异步php代码

php - 如何使用同一主机中不同数据库的触发器更新同一主机数据库

c# - 无法访问数据库,用户访问被拒绝

Mysql 转储还原失败 : Cannot add foreign key constraint

php - 什么会导致这样的事情? PHP - MYSQL 失败

php - 在 Symfony/Doctrine 中删除大量用户数据的最佳/快速解决方案

excel - 微软 Excel : how can I make Max() more efficient?

javascript - 如何提高 Html5 Canvas 性能

python - django: select_related() 在一个已经存在的对象上?