【问题标题】:Alter table name if insert query execution is completed如果插入查询执行完成,则更改表名
【发布时间】:2013-08-19 11:11:38
【问题描述】:

我想以相同的顺序(step1、step2 和 step3)执行以下查询。

问题:

第 2 步中的插入查询需要更多时间来完成插入。由于这个 alter rename 查询失败。

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

请帮我解决这个问题。

【问题讨论】:

  • ijob 表中有多少条记录?
  • 它包含一个 CRORE 数据
  • 您听说过触发器吗?
  • 是的,我知道..我会尝试玩
  • @Dipesh Parmar 是否可以在没有为每行条件更改查询的情况下执行触发器是不可能的

标签: php mysql performance


【解决方案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 服务器本身的性能。

【讨论】:

    【解决方案2】:

    您的代码应如下所示:

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

    这样他们互相跟随。

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

    【讨论】:

    • 这会因为插入查询中的大数据而失败
    • OK - 然后在 mysql 过程中执行此操作,如果您需要定期重复该过程,您可以在此过程中设置计时器。
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2011-07-14
    • 2012-12-08
    • 2012-05-02
    相关资源
    最近更新 更多