我想以相同的顺序执行以下查询(步骤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;
请帮我解决此问题。
答案 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语句重新设置它们。