我有这个功能:
public function index() {
$this->set('var', $this->Model->find('all'));
}
此操作需要3秒以上才能完成。当我评论查找(查询)时,它只用了0.02秒。我已经尝试将调试设置为0 - 没有帮助。我发现只有第一个查询执行时间太长,任何其他查询都在0.01秒以下完成。我知道cakephp在第一次调用数据库时正在创建对象,而且我已经调试了那个需要这么长时间处理的事情。
现在我的问题是:当我从localhost执行索引只需要0.03秒,但是当我在远程服务器上执行相同操作时,它需要超过3秒?服务器不老,也不慢,并且具有良好的处理器和RAM。我已经尝试设置set global innodb_stats_on_metadata = 0;但它也没有帮助。
请大家,我真的需要比简单查询更好的响应时间3秒。我真的需要你的帮助。
答案 0 :(得分:1)
好吧,我很高兴我在一些帮助下想出来了。问题发生在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'
);
当我将主机改为'localhost'时:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'login',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'encoding' => 'utf8'
);
突然创建的mysql对象从4秒以上减少到0.03秒。我仍然无法相信它,我会很感激,如果有人能告诉我为什么会有这么大的差异,但这个小小的改变帮助我解决了我的问题。我希望它也会对某人有所帮助。
答案 1 :(得分:0)
Redrif,我通常建议使用分页,但基于您只检索15条记录的事实,您可能希望研究限制/删除正在检索的关联数据量。
使用此选项删除所有相关数据:
$this->set('var', $this->Model->find('all', array('recursive' => -1)));