最近我问是否有某种方法可以让我的查询执行得更快(主题:Slow postgresql queries in Zend)。我摆脱了'描述'查询,导致了20-30%的提升。但我的查询仍然太慢了。
class Application_Model_DbTable_Images extends Zend_Db_Table_Abstract
{
protected $_name = 'images';
public function getImage($id)
{
$row = $this->fetchRow("id = $id");
return $row;
}
}
我描述了我的应用程序并注意到单个getImage()调用持续约300ms。但如果我把它叫两次,那么第二次通话大约持续15ms。我该怎么做才能使所有查询执行得那么快?
我也100%确定没有描述查询 - 我检查了数据库查询日志,所有查询看起来都很完美。
答案 0 :(得分:0)
听起来只是缓存。它第一次必须从磁盘读取信息,第二次它已经在RAM中。
获取行是否合理300毫秒 - 你通过psql获得了什么?
如果您想了解数据库的性能,您至少需要掌握以下内容:
答案 1 :(得分:0)
尽管数据库本身可以影响性能,但调用代码也是如此。您可能希望比较在ZF中构建查询的不同方法,并查看是否存在任何差异。
电流:
class Application_Model_DbTable_Images extends Zend_Db_Table_Abstract
{
protected $_name = 'images';
public function getImage($id)
{
$row = $this->fetchRow("id = $id");
return $row;
}
}
尝试:
class Application_Model_DbTable_Images extends Zend_Db_Table_Abstract
{
protected $_name = 'images';
public function getImage($id)
{
$select = $this->select()->where('id = ?', $id);//try using the select(), ZF will anyway
$row = $this->fetchRow($select);
return $row;
}
}
或:
类Application_Model_DbTable_Images扩展了Zend_Db_Table_Abstract { protected $ _name ='images';
public function getImage($id)
{
$select = $this->select()->where('id = ?', $id);
$row = $this->fetchAll($select);//maybe a different fetch will have an effect
return $row;
}
}
以下是构建查询的不同方法的几个示例(还有更多),它们可能会或可能不会帮助您提高性能。
答案 2 :(得分:0)
我所要做的就是启用与数据库的持久连接。 有关如何执行此操作的说明可用here。
我不确定它是否安全或有效,但现在我的查询在20毫秒而不是数百毫秒内执行。