CakePHPのアソシエーションでInner Joinを利用してレスポンス速度を向上

  • 2008年12月15日 23:56
  • php

レコードサイズが大きくなってくると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'
                )
        );
}
?>

こういうテクはもちろんケースバイケースですけど、意外に盲点なチューニング方法かもしれません。

関連広告

Trackbacks: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

Home > php > CakePHPのアソシエーションでInner Joinを利用してレスポンス速度を向上

Search
Feeds

Return to page top