2011-02-03 51 views
4

我注意到的Kohana 3 ORM運行「SHOW FULL列」我的每個模型,當我開始使用它們:幫助Kohana的3 ORM加快一點

SHOW FULL COLUMNS FROM `mytable` 

此查詢可能需要幾個時鐘週期來執行(在Kohana分析器中,它實際上是我當前應用程序中運行的最慢的所有查詢)。

有沒有辦法通過禁用這種行爲來幫助Kohana 3 ORM加速並在我的模型中明確定義列?

+2

http://kohanaframework.org/guide/api/ORM檢查了那裏,$ _table_columns可能是你在找什麼。 – egis 2011-02-04 06:33:22

+2

http://forum.kohanaframework。org/discussion/comment/19555 /#Comment_19555 – biakaveron 2011-02-04 21:12:08

回答

7

biakaveron回答我的問題有意見,所以我不能除了正確的答案。

從武泰答案摘自官方Kohana的論壇(其中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') 
); 
+0

我已經選擇了這個作爲正確的答案,因爲它以最好的方式回答問題,無論它是否有用。 – Luke 2011-02-06 00:19:36

1

沒有當查詢被執行的開銷太大;儘管你可以緩存它們/通過手動定義它們來跳過這個過程(如果這真的是你想在你的模型中重寫$_table_columns,儘管我沒有看到你可以節省多少時間 - 這是值得嘗試的)。

我提出了一個替代的緩存爲list_columns()但它得到了否定,因爲它真的是沒有太大的瓶頸:http://dev.kohanaframework.org/issues/2848

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()); 
0

不知道Kohana的團隊是怎麼說的「秀全列」運行速度[R從緩存中退出所有情況。查詢緩存是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

證明從MySQL的NewRelic的插件磁盤上的臨時表。 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