0

我有一个用 cakephp 2.x 开发的网站我有一个包含很多表的查询。我知道执行这个大查询的最有效方法是手动进行连接查询。但我想尝试包含。我只选择了我需要的字段,但最后我打印了里面创建了多少查询: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