I am really a bit lost on why this is happening. I have read a considerable
amount of online info regarding CakePHP and slow queries, but *I don't *believe
its anything wrong with CakePHP. There has got to be a way to speed things
up.
My CakePHP query is below.
Processing of query is considerably slower on new server. (all details
below). I am running a php/MySQL query. I have some peculiar (slow down)
things happening when I transferred the site to another server. *I am
running the exact same php script (and query options) on both servers. The
database tables and data are also identical. *
Test #1 (Server #1): (default) 32 queries took 1 ms
Test #1 (Server #2): (default) 32 queries took 10 ms (9ms longer)
Test #2 (Server #1): (default) 132 queries took 5 ms
Test #2 (Server #2): (default) 144 queries took 60 ms (55ms longer)
To translate the difference into seconds of waiting time, server #1
generally processes any query (meaning results are displayed) within 3
seconds. And server #2 generally 7-14 seconds.
I am sorry to post my entire search() function (which is returning the
results as expected), but if anyone can evaluate it for problem points and
*harsh
*critique I am all ears!
function search($ApplicantAge = 0, $SpouseAge = 0, $NumberChildren = 0,
$Vision = 0, $Zip = 0) {
$search = $this->data['Plan'];
$searchdetails = array();
if (isset($search['ApplicantAge'])) {
$this->Plan->set($this->data);
if ($this->Plan->validates()) {
$ApplicantAge = $search['ApplicantAge'];
} else {
$errors = $this->Plan->invalidFields();
$error_messages = implode(' ', $errors);
$this->Session->setFlash($error_messages);
$this->redirect('/');
}
}
$searchdetails[0] = $ApplicantAge;
if (isset($search['SpouseAge']) && !empty($search['SpouseAge'])) {
$SpouseAge = $search['SpouseAge'];
}
$searchdetails[1] = $SpouseAge;
if (isset($search['NumberChildren']) &&
!empty($search['NumberChildren'])) {
$NumberChildren = $search['NumberChildren'];
}
$searchdetails[2] = $NumberChildren;
if (isset($search['Vision']) && !empty($search['Vision'])) {
$Vision = $search['Vision'];
}
$searchdetails[3] = $Vision;
if (isset($search['ZipCode']) && !empty($search['ZipCode'])) {
$Zip = $search['ZipCode'];
}
$searchdetails[4] = $Zip;
$memberCount = 1;
if ($SpouseAge > 0) {
$memberCount += 1;
}
if ($NumberChildren > 0) {
$memberCount += $NumberChildren;
}
$comboType = 'sa';
if ($ApplicantAge < 18) {
$comboType = 'sc';
}
if ($SpouseAge > 0) {
if ($NumberChildren > 0) {
$comboType = 'asc';
} else {
$comboType = 'as';
}
} else {
if ($NumberChildren > 0) {
$comboType = 'ac';
}
}
$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(
"AND" => array(
array($ApplicantAge . ' BETWEEN Age.Min_Age AND
Age.Max_age'),
'Zips.title' => $Zip,
'Applicant.amount' => array($comboType, $memberCount)
)
),
'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");
}
$url = array('controller' => 'plans', 'action' => 'search');
$this->paginate = $options;
$this->set('searchdetails', array_merge($url, $searchdetails));
$this->set('plans', $this->paginate('Plan'));
$this->set('ApplicantAge', $ApplicantAge);
$this->set('SpouseAge', $SpouseAge);
$this->set('NumberChildren', $NumberChildren);
$this->set('Vision', $Vision);
$this->set('Zip', $Zip);
if ($this->RequestHandler->isPost()) {
$this->Session->write('search_form_sess', $this->data);
$initial_url = $ApplicantAge . '/' . $SpouseAge . '/' .
$NumberChildren . '/' . $Vision . '/' . $Zip;
$this->redirect(array('action' => 'search', $initial_url));
exit();
}
$this->layout = 'default';
}
*MySQL Server Data*
***Server #1***
Server: Localhost via UNIX socket
Server version: 5.0.92-community
MySQL client version: 5.0.92
PHP extension: mysql
Protocol version: 10
----------------------------------------
***Server #2***
Server: Localhost via UNIX socket
Server version: MySQL - 5.0.51a-24+lenny5-log
MySQL client version: 5.0.51a
PHP extensions: mysql
Protocol version: 10
--
Our newest site for the community: CakePHP Video Tutorials
http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others
with their CakePHP related questions.
To unsubscribe from this group, send email to
[email protected] For more options, visit this group at
http://groups.google.com/group/cake-php