4

当我开始使用它们时,我注意到 Kohana 3 ORM 为我的每个模型运行“显示完整列”:

SHOW FULL COLUMNS FROM `mytable`

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

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

4

4 回答 4

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')
);
于 2011-02-04T23:23:28.603 回答
1

执行该查询时没有太多开销;尽管您可以通过手动定义它们来缓存它们/跳过该过程(如果这确实是您想要覆盖$_table_columns模型中的内容,但我不知道您可以节省多少时间 - 值得尝试)。

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

于 2011-02-05T12:46:08.343 回答
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());
于 2012-03-20T10:05:58.913 回答
0

不确定 kohana 团队如何说“显示完整列”在所有情况下都像从缓存中快速读取一样运行。由于 . 所以我们不得不关掉它。

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

于 2015-02-18T03:10:54.773 回答