0

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

问题:

step2 中的插入查询需要更多时间来完成插入。由于此更改重命名查询失败。

第 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;

请帮我解决这个问题。

4

2 回答 2

1

您可以用来尝试解决问题的一种选择是mysqli_multi_query

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

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

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

于 2013-08-19T11:51:40.737 回答
0

您的代码应如下所示:

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

这样他们就互相跟随了。

您可以通过删除 2 个 KEY 语句来加快插入速度,然后使用 ALTER 语句恢复它们。

于 2013-08-19T11:16:39.043 回答