AgileToolkit 4.2.4 を使用していますが、Model_Table を使用して大量の項目を InnoDB エンジンを使用して MySQL 5.5.31 データベースに挿入すると、パフォーマンスの問題が発生します。いくつかのテストの後、hasOne() などの参照を使用するとモデルが遅くなることがわかりました。
パフォーマンス テスト:
<?php
$t = $this->add('Model_Test');
for ($i = 0; $i < 500; $i++)
{
$t->unload();
$t->set('field1', 1);
$t->set('field2', 1);
$t->save();
}
?>
モデル 1 を使用 (500 回の挿入で 2.7 秒):
<?php
class Model_Test extends Model_Table
{
public $table = 'test';
function init()
{
parent::init();
$this->addField('field1')->length(45);
$this->addField('field2')->length(45);
}
}
?>
モデル 2 を使用 (500 インサートで 21.3 秒):
<?php
class Model_Test extends Model_Table
{
public $table = 'test';
function init()
{
parent::init();
$this->hasOne('Test', 'field1');
$this->hasOne('Test', 'field2');
}
}
?>
モデル 2 のこの例では、同じモデル Test のインスタンスを参照していますが、他のモデルを参照した場合にも発生します。
この問題を克服するために私にできることはありますか? さらに、これはモデルを使用してアイテムを挿入する正しい方法ですか。一度だけ追加して、ループ内で unload() を実行しますか?