帮助Kohana 3 ORM加速一点

时间:2011-02-03 22:53:32

标签: kohana-3 kohana-orm

当我开始使用它时,我注意到Kohana 3 ORM为我的每个模型运行了“SHOW FULL COLUMNS”:

SHOW FULL COLUMNS FROM `mytable`

此查询可能需要几个时钟周期才能执行(在Kohana分析器中,它实际上是我当前应用程序中运行的所有查询中最慢的)。

有没有办法通过禁用此行为来帮助Kohana 3 ORM加速并明确定义模型中的列?

4 个答案:

答案 0 :(得分:7)

biakaveron 通过评论回答了我的问题,所以除了正确答案之外我不能。

取自官方Kohana论坛上的Wouters答案(biakaveron指出的地方),这是正确答案:

  

这很简单,$table_columns是一个   有大量信息的大阵列,但是   实际上只有很少的这些信息   在ORM中使用。

     

这样做:

protected $_table_columns = array(
    'id'            =>  array('type'=>'int'),
    'name'          =>  array('type'=>'string'),
    'allowNull'     =>  array('type'=>'string','null'=>TRUE),
    'created'       =>  array('type'=>'int')
);

答案 1 :(得分:1)

执行该查询时没有太多开销;虽然你可以通过手动定义它们来跳过它们/跳过这个过程(如果真的是你想要覆盖模型中的$_table_columns,虽然我没有看到你能节省多少时间去做 - 这值得尝试)。

我为list_columns()提出了一种缓存替代方案,但它被拒绝了,因为它确实不是一个瓶颈:http://dev.kohanaframework.org/issues/2848

答案 2 :(得分:1)

不要忘记下划线:

protected $_table_columns = array(
    'id'            =>  array('type'=>'int'),
    'name'          =>  array('type'=>'string'),
    'allowNull'     =>  array('type'=>'string','null'=>TRUE),
    'created'       =>  array('type'=>'int')
);

这将为您提供完整的专栏 信息作为数组:

var_export($ORM->list_columns());

答案 3 :(得分:0)

不确定kohana团队如何表示“显示完整列”的运行速度可以从缓存中快速读取所有情况。查询缓存是我们工作负载的mysql瓶颈所致。所以我们不得不关掉它。

https://blogs.oracle.com/dlutz/entry/mysql_query_cache_sizing

显示完整列的证明是运行最多的查询 https://www.dropbox.com/s/zn0pbiogt774ne4/Screenshot%202015-02-17%2018.56.21.png?dl=0

来自NewRelic mysql插件的磁盘上临时表的证明。 https://www.dropbox.com/s/cwo09sy9qxboeds/Screenshot%202015-02-17%2019.00.19.png?dl=0

按查询次数排序的违规查询(> 100ms)。

https://www.dropbox.com/s/a1kpmkef4jd8uvt/Screenshot%202015-02-17%2018.55.38.png?dl=0