Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
慢速PHP/MySQL查询。重新考虑所要求的援助。(160k和300行表格长度)_Php_Mysql_Performance_Refactoring_Timeout - Fatal编程技术网

慢速PHP/MySQL查询。重新考虑所要求的援助。(160k和300行表格长度)

慢速PHP/MySQL查询。重新考虑所要求的援助。(160k和300行表格长度),php,mysql,performance,refactoring,timeout,Php,Mysql,Performance,Refactoring,Timeout,所以我有一个notes字段,它将一行分配的用户id更新为新id。注释长度约为160k。用户表大约是300 对于每个notes行,我将分配的用户id与用户表进行比较,如果找到匹配项,则获取新的用户id并更新notes表。冲洗重复: //dis-allow timeout. Was timing out consistently under 100 rows changes. set_time_limit(0); ignore_user_abort(1); //foreach note $coun

所以我有一个notes字段,它将一行分配的用户id更新为新id。注释长度约为160k。用户表大约是300

对于每个notes行,我将分配的用户id与用户表进行比较,如果找到匹配项,则获取新的用户id并更新notes表。冲洗重复:

//dis-allow timeout. Was timing out consistently under 100 rows changes.
set_time_limit(0);
ignore_user_abort(1);

//foreach note
$counter = 0;
foreach ( $msCRMAnnotations as $key=>$value)
{

    //foreach user, check for match between assigned_user_id and id_mscrm
    foreach( $sugarCRMUsers as $key2=>$value2 )
    {
        if($value['assigned_user_id'] == $value2['id_mscrm'] )
        {
            //give some output as to what is changing...
            echo("Note #"  . $counter++ . " - Note id " . $value['id'] . "  is assigned to user " . $value2['user_name'] . ".<br />" );

            $query = "
                UPDATE `notes`
                SET `assigned_user_id` = '" . $value2['id'] . "'
                WHERE `id` = '" . $value['id'] . "' AND
                `assigned_user_id` = '" . $value['assigned_user_id'] . "'
            ";
            $DB->query($query);
            //unset($query);
        }
    }
}
具体来说,我们正在将select数据从MsCRM迁移到SugarCRM。这是项目的帐户/注释/用户阶段


那么现在的问题是……我如何才能最好地重新考虑上述代码以提高性能?非常感谢您的任何帮助。

使用事先准备好的语句可能会有所帮助。看

此外,您还可以使用该命令一次发布多个更新。根据主键的实现方式,这可能/可能不起作用:

REPLACE INTO `notes` (`id`, `assigned_user_id`)
VALUES
(?, ?),
(?, ?),
(?, ?),
(?, ?),
(?, ?)
。。。您还需要一组包含ID和分配的用户ID的参数

[Edit]PDO可能决定模拟准备好的语句。您可以使用$pdo->setAttributePDO::ATTR_EMULATE_PREPARES,FALSE关闭此功能。从这两个方面分析,看看什么对你最合适。

从评论中假设:


尝试为这些列设置索引,以便更快地搜索。

尝试为这些列设置索引,以便更快地搜索在分配的用户id和id列上添加索引,根据SugarCRM的要求,这两个列都是char36类型。。。结果:速度大幅提升,现在可以在超时之间完成7265次……这就是为什么我需要提高SQL技能的原因。如果你喜欢某人的答案,你可以点击Anwser旁边的复选框,将其标记为已接受。你能解释一些事情吗?什么是用户表格式?您是在该表中为旧id和新id使用2列,还是来自不同的表?这不能在数据库中一次性完成,而不是必须为单个用户完成吗?对不起,如果我的问题没有意义,我没有任何CRM的经验,但我知道一些sqlyeaaa,不幸的是,我们在这个项目中使用mysqli而不是PDO。我真的需要更多地运用事先准备好的陈述。谢谢你提供的信息。@Pheagey看起来$DB->query可能是PDO。别担心。
REPLACE INTO `notes` (`id`, `assigned_user_id`)
VALUES
(?, ?),
(?, ?),
(?, ?),
(?, ?),
(?, ?)