私は質問があります: 私は Yii と InnoDB で大きなアプリケーションを構築しましたが、挿入/更新に非常に長い時間がかかるという問題に遭遇しました。これが私の php レポートです:
INNODB: admin ユーザー更新 55.247464895248 秒 ekuskov ユーザー更新 13.282548904419 秒 doriwall ユーザー更新 0.002094030380249 秒
MYISAM: 管理者 ユーザー更新 7.8317859172821 秒 ekuskov ユーザー更新 1.6304929256439 秒 doriwall ユーザー更新 0.0020859241485596 秒
挿入/更新を高速化するための解決策を誰かが提案できますか?
編集 - - - - - - - - - - - - - - - - - - - - - - -
今、私はいくつかの非常に単純な挿入ループを使用しました:
public function run($args) {
$time = -microtime(true);
$begin = DateTime::createFromFormat('Y-m-d H:i:s', '2010-01-01 00:00:00');
$end = DateTime::createFromFormat('Y-m-d H:i:s', '2013-01-01 00:00:00');
$end->add(new DateInterval('P1D'));
$interval = DateInterval::createFromDateString('1 day');
$days = new DatePeriod($begin, $interval, $end);
foreach ( $days as $day ) {
echo "i";
$track = new TimeTracking();
$track->user_id = 25;
$track->date = $day->format('Y-m-d H:i:s');
$track->active = 4;
$track->save(false);
}
$time += microtime(true);
echo count($days)." items insert - $time seconds\n";
}
そして今INSERT時間は次のとおりです:
InnoDB: アイテムの挿入 - 72.269570827484 秒
MyISAM: アイテムの挿入 - 0.87537479400635 秒
[編集]そして今、私は SAVE メソッド全体と Yii モデルの「save()」関数の時間を数えていました:
更新: モデル -> 保存 (false) - 0.1096498966217 秒
更新: コントローラーの保存機能 () - 0.1302649974823 秒
作成: モデル -> 保存 (false) - 0.052282094955444 秒
CREATE: コントローラー保存関数 () - 0.057214975357056 秒
save() メソッドだけでこんなに時間がかかるのはなぜですか?
[編集]私は save() と command() をテストしましたが、それらは同じです:
$track->save(false);
また
$command = Yii::app()->db->createCommand();
$command->insert('timeTracking', array(
'id'=>NULL,
'date'=>$track->date,
'active'=>$track->active,
'user_id'=>$track->user_id,
));
編集------------------------------
以下は、1,097 個のオブジェクトを挿入した場合の統計です。
save(): 0.86-0.94,
$command->insert(): 0.67-0.72,
$command->execute(): 0.46-0.48,
mysql_query(): 0.33-0.36
最終的な回答:大規模な INSERT または UPDATE メソッドを使用する場合は、直接 MYSQL 呼び出しを使用して関数を作成することを検討する必要があります。実行時間のほぼ 70% を節約できます。
よろしく、
エドガー