如果插入查询执行完成,请更改表名

时间:2013-08-19 11:11:38

标签: php mysql performance

我想以相同的顺序执行以下查询(步骤1,步骤2和步骤3)。

问题:

步骤2中的插入查询花费更多时间来完成插入。由于这种改变,重命名查询失败。

步骤1:创建如下表格结构:

CREATE TABLE IF NOT EXISTS `app_summary` (
`date` date NOT NULL,
`app_id` smallint(6) NOT NULL,
`datetimes` datetime NOT NULL,      
KEY `date` (`date`),
KEY `app_id` (`app_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

第2步:使用此查询填写表格

INSERT INTO app_summary(date, app_id, datetimes) 
    SELECT 
        DATE_FORMAT(CONVERT_TZ(job.datetimes, '+00:00', '+05:30'), '%Y-%m-%d') AS dates,
        job.app_id,
        MAX(job.datetimes) AS datetimes  
    FROM 
        ijob AS job
    WHERE 1
    GROUP BY 
        dates, app_id
    ORDER BY 
        NULL

第3步:重命名表

ALTER TABLE app_summary RENAME TO summary;

请帮我解决此问题。

2 个答案:

答案 0 :(得分:1)

您可以使用一个选项来尝试解决问题:mysqli_multi_query

这可能更像是一个黑客攻击。我的另一个选择是在INSERT返回影响使用的行数后检查:

if ($mysqli->affected_rows > 0){
    //RUN THE RENAME QUERY
}
else {
    //TRY THE INSERT AGAIN.
}

如果$mysqli->affected_rows > 0然后您可以执行重命名部分,请尝试再次运行INSERT。总而言之,在使用suc大插入时,你应该看看是否无法提高表和mysql服务器本身的性能。

答案 1 :(得分:0)

您的代码应如下所示:

$sql = 'CREATE TABLE....';
mysqli_($sql);
$sql = 'INSERT INTO ...';
mysqli_query( $sql );
$sql = 'ALTER TABLE ...';
mysqli_query( $sql );

这样他们就会互相追随。

您可以加速插入删除2个KEY语句并使用ALTER语句重新设置它们。