首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AgileToolkit -在带有引用的Model_Table中保存()的性能

AgileToolkit -在带有引用的Model_Table中保存()的性能
EN

Stack Overflow用户
提问于 2013-10-11 20:20:00
回答 1查看 39关注 0票数 1

我正在使用AgileToolkit 4.2.4,在使用Model_Table将大量项目插入到带有InnoDB引擎的MySQL 5.5.31数据库中时,遇到了一些性能问题。经过一些测试,我发现模型在使用引用时变得很慢,例如使用hasOne()。

性能测试:

代码语言:javascript
复制
<?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秒):

代码语言:javascript
复制
<?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秒):

代码语言:javascript
复制
<?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()?

EN

回答 1

Stack Overflow用户

发布于 2013-11-27 01:09:42

尝尝这个

代码语言:javascript
复制
$t = $this->add('Model_Test');

for ($i = 0; $i < 500; $i++) {
    $t->set('field1', 1);
    $t->set('field2', 1);
    $t->saveAndUnload();     //  <--------
}

方法()保存数据并再次从数据库加载它们以填充您的模型(这是id自动增量字段在模型中的显示方式)。另一方面,saveAndUnload()在保存后不从数据库中选择任何数据。如果您将->debug()添加到您的模型中,当您使用()时,您将看到两个请求-插入和选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19318014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档