CakePHP加入和条件优化苛刻批评PLEASE

时间:2011-05-11 22:12:43

标签: php mysql cakephp

我是否可以使用一组新的眼睛查看我的查询(按预期工作),但我正在寻找严厉的批评和建议或改进方法:

...

$options = array(
    'joins'      => array(
        array(
            'table'      => 'plans_zips',
            'alias'      => 'PZips',
            'type'       => 'inner',
            'foreignKey' => false,
            'conditions' => array('Plan.id = PZips.plan_id')
        ),
        array(
            'table'      => 'zips',
            'alias'      => 'Zips',
            'type'       => 'inner',
            'foreignKey' => false,
            'conditions' => array('Zips.id = PZips.zip_id')
        )
    ),
    'conditions' => array(
        "OR" => array(
            'AND' => array(
                $ApplicantAge . ' BETWEEN Age.Min_Age AND Age.Max_age',
                'Zips.title'               => $Zip,
                'Applicant.amount'         => array($comboType, $memberCount),
            "NOT" => 
                array(array('PlanDetail.company_id' => array('27','3')))),
            array(
                $PsSpouseAge . ' BETWEEN Age.Min_Age AND Age.Max_age',
                'Zips.title'            => $Zip,
                'Applicant.amount'      => array($comboType, $memberCount),
                'PlanDetail.company_id' => '27'),
            array(
                $OdsSpouseAge . ' BETWEEN Age.Min_Age AND Age.Max_age',
                'Zips.title'            => $Zip,
                'Applicant.amount'      => array($comboType, $memberCount),
                'PlanDetail.company_id' => '3'))
),
    'contain'    => array(
        'PlanDetail' => array(
            'fields'   => array(
                'id',
                'effective_date',
                'expiration_date',
                'active',
                'name',
                'plan_type_id',
                'max_benefit',
                'deductible',
                'preventive',
                'basic',
                'major',
                'ortho',
                'application_url',
                'company_id',
                'plan_type_id',
                'plan_detail_note_id'),
            'Company'  => array('fields' => array(
                'id',
                'name',
                'company_logo_url'
            )),
            'PlanType' => array('fields' => array(
                'id',
                'name',
                'description'
            ))),
        'Age'        => array('fields' => array(
            'id',
            'name',
        )),
        'Applicant'  => array('fields' => array(
            'id',
            'name',
        )),
        'Zip'        => array('fields' => array(
            'id',
            'title')
        )
    ),
    'limit'      => 100,
    'order'      => array('monthly_cost' => 'ASC')
);
if ($Vision == 1) {
    array_push($options['conditions'], "dental_cost > 0");
}

...

2 个答案:

答案 0 :(得分:0)

我建议通过执行多个较小的查询来简化查询。否则,唯一的另一个选择是优化数据库引擎或使用mysql探查器尝试在SQL中优化查询以获得更好的性能。

答案 1 :(得分:0)

你可以在调试>生成查询日志的某个地方发布到pastebin吗? 1?

另外 - 发布mysql db的describe语句结果,这样我们就可以看到你的索引/表结构了。

如果没有查看生成的查询/查询并查看数据库信息,任何人都无法对此进行评估。