は、私は(意図したとおりに動作している)私のクエリを見て、目の新しいセットを持つことができますしてください、私は厳しい批判や提案や改善の方法を探しています: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");
}
...
同じスクリプトと同じデータベーススキーマの場合は、おそらくMySQLサーバーです。サーバーを最適化する必要があるかもしれません。この[記事](http://www.joehayes.org/optimizing-mysql-for-dummies.html)にあるスクリプトを実行してみてください。 – junwafu