我是否可以使用一组新的眼睛查看我的查询(按预期工作),但我正在寻找严厉的批评和建议或改进方法:
...
$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");
}
...
答案 0 :(得分:0)
我建议通过执行多个较小的查询来简化查询。否则,唯一的另一个选择是优化数据库引擎或使用mysql探查器尝试在SQL中优化查询以获得更好的性能。
答案 1 :(得分:0)
你可以在调试>生成查询日志的某个地方发布到pastebin吗? 1?
另外 - 发布mysql db的describe语句结果,这样我们就可以看到你的索引/表结构了。
如果没有查看生成的查询/查询并查看数据库信息,任何人都无法对此进行评估。