我正在使用 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() ?