Ich habe eine Frage: Ich habe eine große Anwendung mit Yü und InnoDB gebaut und kam zu dem Problem, dass der insert/update durate wirklich wirklich lange Zeit, hier ist mein PHP-Bericht:Yü-Framework - InnoDB vs MyISAM
INNODB: Benutzer Admin Update 55,247464895248 Sekunden ekuskov Benutzer Update 13,282548904419 Sekunden doriwall Benutzer Update ,002094030380249 Sekunden
MYISAM: Benutzer admin Update 7,8317859172821 Sekunden ekuskov Benutzer Update 1,6304929256439 Sekunden doriwall Benutzer Update ,00208592414855 96 Sekunden
Kann jemand eine Lösung vorschlagen, um das Einfügen/Update zu beschleunigen?
BEARBEITEN --------------------------------------------- -
jetzt benutzte ich einige sehr einfache Insert-Loop:
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";
}
und jetzt die INSERT Zeiten sind folgende:
InnoDB: Artikel einfügen - 72,269570827484 Sekunden
MyISAM: Artikel einfügen - ,87537479400635 Sekunden
[EDIT] Und jetzt Zählzeit für ganze SAVE-Methode und Yü Models "speichern()" Funktion i wurde:
UPDATE: modell-> save (false) - ,1096498966217 Sekunden
UPDATE : Controller Sparfunktion() - ,1302649974823 Sekunden
CREATE: modell-> save (false) - ,052282094955444 Sekunden
CREATE: controller Sparfunktion() - ,057214975357056 Sekunden
Warum dauert die save() Methode so lange?
[EDIT] Ich habe save() vs Befehl getestet() und sie durate gleich:
$track->save(false);
oder
$command = Yii::app()->db->createCommand();
$command->insert('timeTracking', array(
'id'=>NULL,
'date'=>$track->date,
'active'=>$track->active,
'user_id'=>$track->user_id,
));
EDIT ------ -----------------------
Und hier ist eine Statistik zum Einfügen von 1.097 Objekte :
save(): 0.86-0.94,
$command->insert(): 0.67-0.72,
$command->execute(): 0.46-0.48,
mysql_query(): 0.33-0.36
ENDLICH ANTWORT: Wenn Sie einige massive INSERT oder UPDATE Methoden verwenden möchten, sollten Sie die Funktionen mit direktem MYSQL fordert zu schaffen betrachten zu, dort werden Sie fast 70% der Ausführungszeit sparen.
Grüße,
Edgar
Das klingt nicht richtig. Vielleicht sollten Sie Ihre Fragen überprüfen. Was ist der Unterschied zwischen Benutzern von admin, ekuskov und doriwall? –
Können Sie Ihre Tabellenstrukturen posten? – DarkMukke
http://d.pr/i/P6zp Die Funktion aktualisiert nur die Balance-Zeiten für jeden Benutzer. – ekussberg