我得到了这个函数:
public function index() {
$this->set('var', $this->Model->find('all'));
}
此操作需要超过3秒才能完成。当我注释掉find (query)时,它只花了0.02秒。我已经尝试将debug设置为0 -没有帮助。我发现只有第一个查询需要这么长时间来执行,其他任何查询都在0.01秒内完成。我知道cakephp在第一次调用数据库时正在创建对象,并且我已经调试过了,这就是为什么需要这么长时间来处理。
现在我的问题是:这是怎么可能的,当我执行索引从本地主机只需要0.03秒,但当我做同样的远程服务器需要超过3秒?服务器本身既不老也不慢,而且有很好的处理器和RAM。我已经尝试设置set global innodb_stats_on_metadata=0;但这也无济于事。
我真的需要比3秒更好的响应时间来简单的查询。我真的需要你的帮助。好吧,伙计们,我很高兴我在一些帮助下弄明白了。问题出在app/config/database.php
文件看起来像这样:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'db.domain.com',
'login' => 'login',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'encoding' => 'utf8'
);
当我将host更改为'localhost'时:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'login',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'encoding' => 'utf8'
);
mysql对象的创建从超过4秒减少到0.03秒。我仍然不敢相信,如果有人能告诉我为什么会有这么大的不同,我会很感激,但这个小小的改变帮助我解决了我的问题。我希望它也能帮助到别人。
Redrif,我通常会建议分页,但基于您只检索15条记录的事实,您可能希望考虑限制/删除正在检索的关联数据的数量。
删除所有关联数据:
$this->set('var', $this->Model->find('all', array('recursive' => -1)));