Присоединение CakePHP и оптимизация условий суровая критика ПОЖАЛУЙСТА - PullRequest
0 голосов
/ 12 мая 2011

Могу ли я по-новому взглянуть на мой запрос (который работает как задумано), но я ищу резкую критику и предложения или пути улучшения:

...

$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 голосов
/ 13 мая 2011

Можете ли вы публиковать где-нибудь на пастбине журнал запросов, сгенерированный при отладке> 1?

Также - опубликуйте результаты оператора description из базы данных mysql, чтобы мы могли видеть ваши индексы / структуру таблицы.

Не глядя на сгенерированный запрос / запросы и не просматривая информацию базы данных, никто не может реально оценить это.

0 голосов
/ 12 мая 2011

Я бы предложил поработать над упрощением запроса, возможно, выполнив несколько небольших запросов. В противном случае единственным другим вариантом будет оптимизация вашей базы данных или использование профилировщика mysql, чтобы попытаться оптимизировать запрос в SQL для повышения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...