レコードサイズが大きくなってくるとhasOneやbelongsToのアソシエーションでかなり時間を食うときがあります。特に大きな処理をしなくても、ページアクセス時にControllerでdescribe <Table>して、結合した結果を舐めて時間が食われます。
いくらなんでも時間かかりすぎだろ、、と思ってよく調べてみたらCakeでのテーブル間JoinてLeft Joinになってるんですね。クエリ凝視するまで気づかなかった。これ、特に問題なければ内部結合(Inner Join)にするだけでレスポンス速度は大きく変わります。方法はModelでアソシエーション対象Model名のtypeを"INNER"にするだけ。
<?php
class User extends AppModel {
var $name = 'User';
var $hasOne = array(
'Profile' => array(
'className' => 'Profile',
'foreignKey' => 'user_id',
'conditions' => '',
'type' => ' INNER'
)
);
}
?>
こういうテクはもちろんケースバイケースですけど、意外に盲点なチューニング方法かもしれません。
- Newer: はてなスターを付けてみました
- Older: Rubyでブックマークカウンタの修正スクリプト書きました
Google Adsense
Social bookmark comment : 0
No comment.
Comment : 0
Trackback : 0
- TrackBack URL for this entry
- http://blog.katsuma.tv/mt-tb.cgi/185
- Listed below are links to weblogs that reference
- CakePHPのアソシエーションでInner Joinを利用してレスポンス速度を向上 from blog.katsuma.tv
2008/12/15 (Mon)