当我开始使用它时,我注意到Kohana 3 ORM为我的每个模型运行了“SHOW FULL COLUMNS”:
SHOW FULL COLUMNS FROM `mytable`
此查询可能需要几个时钟周期才能执行(在Kohana分析器中,它实际上是我当前应用程序中运行的所有查询中最慢的)。
有没有办法通过禁用此行为来帮助Kohana 3 ORM加速并明确定义模型中的列?
答案 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