0

次のクエリを同じ順序 (step1、step2、および step3) で実行したいと考えています。

問題:

ステップ 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;

この問題を解決するのを手伝ってください。

4

2 に答える 2

1

問題を解決するために使用できる 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 サーバー自体のパフォーマンスを改善できないかどうかを確認する必要があります。

于 2013-08-19T11:51:40.737 に答える