0

Cakephp 2.x で開発されたサイトがあります。非常に多くのテーブルが関連付けられたクエリがあります。この大きなクエリを実行する最も効率的な方法は、結合クエリを手動で作成することです。しかし、contain を試してみたかったのです。必要なフィールドのみを選択しましたが、最後に内部で作成されたクエリの数を出力します: 5000 クエリ!! データベースがこのクエリを作成するのに 6 ~ 10 秒かかるため、時間を最適化したいと考えています。Cakephp を最適化する方法はありますか? 作成する結合がたくさんあるので、今は結合を使用したくありません。可能です?これは大量のデータを含むクレイジーなクエリですが、大量のデータを含む製品のメイン ページです。これはクエリです:

$this->set('product',$this->Product->find('all', array(
                    'contain' => array(
                            'Origin'  => array(
                                'fields'=>array('id','diet_id'),
                                'OriginAlias' => array(
                                    'fields'=>array('id','origin_id','language','alias'),
                                    'conditions' =>  array('OriginAlias.language' => $lang)
                                ),
                                'Diet' => array(
                                    'fields'=>array('id'),
                                    'DietAlias' => array(
                                        'fields'=>array('id','diet_id','language','alias'),
                                        'conditions' =>  array('DietAlias.language' => $lang)
                                    ),
                                )
                            ),
                            'ProductAlias' => array(
                                    'conditions' =>  array('ProductAlias.alias' => $alias),
                                    'User' => array(
                                        'fields'=>array('id','username'),
                                        'Profile' => array(
                                            'fields'=>array('id','user_id','country','sex','diet','show_diet'),
                                        ),
                                        'UserOptions' => array ('fields' => array ('avatar_type')),
                                        'Avatar' => array ('fields' => array ('filename'))
                                    ),
                                    'User2' => array(
                                        'fields'=>array('id','username'),
                                        'Profile' => array(
                                            'fields'=>array('id','user_id','country','sex','diet','show_diet'),
                                        ),
                                        'UserOptions' => array ('fields' => array ('avatar_type')),
                                        'Avatar' => array ('fields' => array ('filename'))
                                    )
                            ),
                            'ProductImage'=> array(
                                'limit' => 1,

                                'ProductImageVote'=> array(
                                    'order' => 'ProductImageVote.vote desc'
                                ),
                                'User' => array(
                                    'fields'=>array('id','username'),
                                        'Profile' => array(
                                            'fields'=>array('id','user_id','country','sex','diet','show_diet'),
                                        ),
                                )
                            ),
                            'ProductGroupProduct' => array(
                                'fields'=>array('id','user_id','product_id','product_group_id'),
                                'ProductGroup'=> array(
                                            'fields'=>array('id','text','language'),
                                        ),
                            ),
                            'ProductIngredientVersion' => array(
                                'conditions' =>  $cond_version,
                                'limit' => 1,
                                'ProductIngredient' => array(
                                    /*'Product' => array(
                                        'ProductAlias' => array()
                                    ),*/
                                    'Ingredient' => array(
                                        'fields'=>array('id','user_id','origin_id','active'),
                                        'IngredientAlias' => array(
                                            'fields'=>array('id','user_id','ingredient_id','edit_user_id','alias'),
                                        ),
                                    ),
                                ),
                            ),
                            'ProductVersion' => array(
                                'conditions' =>  array('ProductVersion.active' => '1', 'ProductVersion.product_id' => $id),
                                'limit' => 1,
                                'ProductProperty' => array(
                                    'Property' => array(
                                        'fields'=>array('id','user_id','group_id','unit_id'),
                                        'PropertyAlias'  => array(
                                            'fields'=>array('id','user_id','property_id','alias','language'),
                                            'conditions' =>  array('PropertyAlias.language' => $lang)
                                        ),
                                        'Unit' => array(
                                            'fields'=>array('id','user_id','symbol','active'),
                                        ),
                                        'PropertyGroup' => array(
                                            'fields'=>array('id','user_id'),
                                            'PropertyGroupAlias'  => array(
                                                'fields'=>array('id','user_id','group_id','alias'),
                                                'conditions' =>  array('PropertyGroupAlias.language' => $lang)
                                            )
                                        )
                                    ),
                                ),
                            ),
                            'Manufacturer' => array(
                                            'fields'=>array('id','text'),
                                        ),
                            'Brand' => array(
                                            'fields'=>array('id','text'),
                                        ),
                            'UserProductLike' => array(
                                'conditions' =>  array('UserProductLike.product_id' => $id),
                            ),
                            'UserProductHate' => array(
                                'conditions' =>  array('UserProductHate.product_id' => $id),
                            ),
                        ),
                    'conditions' => array('Product.id' => $id)  
                )));    
4

0 に答える 0