我正在使用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()?
发布于 2013-11-27 01:09:42
尝尝这个
$t = $this->add('Model_Test');
for ($i = 0; $i < 500; $i++) {
$t->set('field1', 1);
$t->set('field2', 1);
$t->saveAndUnload(); // <--------
}方法()保存数据并再次从数据库加载它们以填充您的模型(这是id自动增量字段在模型中的显示方式)。另一方面,saveAndUnload()在保存后不从数据库中选择任何数据。如果您将->debug()添加到您的模型中,当您使用()时,您将看到两个请求-插入和选择。
https://stackoverflow.com/questions/19318014
复制相似问题