Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend中的慢速Postgres查询_Php_Performance_Zend Framework_Postgresql - Fatal编程技术网

Php Zend中的慢速Postgres查询

Php Zend中的慢速Postgres查询,php,performance,zend-framework,postgresql,Php,Performance,Zend Framework,Postgresql,最近我问是否有某种方法可以让我的查询执行得更快(主题:)。我摆脱了“描述”查询,结果提高了20-30%。但我的查询还是太慢了 class Application_Model_DbTable_Images extends Zend_Db_Table_Abstract { protected $_name = 'images'; public function getImage($id) { $row = $this->fetchRow("id = $

最近我问是否有某种方法可以让我的查询执行得更快(主题:)。我摆脱了“描述”查询,结果提高了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()调用大约持续300毫秒。但是如果我打两次电话,那么第二次电话大约持续15毫秒。我该怎么做才能让所有查询执行得这么快


我也100%确定不再有描述查询了——我查看了数据库查询日志,所有查询看起来都很完美。

听起来好像只是缓存。第一次它必须从磁盘读取信息,第二次它已经在RAM中了

获取行的300ms是否合理-您通过psql获得了什么

如果您想了解数据库的性能,您至少需要掌握以下基本知识:

  • 您在什么硬件上运行,特别是磁盘I/O和寻道时间
  • 您的查询计划(通过)
  • 查询中移动了多少数据
  • 了解您的数据库是否变得臃肿(如果配置适当,应防止这种情况发生)

  • 数据库本身会影响性能,调用代码也会影响性能。您可能希望比较在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;
        }
    }
    
    尝试:

    或:

    类应用程序\u模型\u DbTable\u图像扩展了Zend\u Db\u Table\u抽象 { 受保护的$_名称='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;
    }
    
    }


    这里有几个构建查询的不同方法的示例(还有很多),它们可能有助于提高您的性能。

    我所要做的就是启用与数据库的持久连接。 关于如何做到这一点的解释是可用的


    我不确定它是否安全或有效,但现在我的查询执行时间是20毫秒,而不是数百毫秒。

    否-服务器将缓存磁盘内容,因此当它再次尝试读取磁盘的该部分时,它已经在RAM中。1。这些缓存文件每个只有5kB左右-file\u get\u contents()可以在短时间内(约1ms)处理它们。2.单行中的数据少于2kB。4. '“图像”表包含约3000行。我在pgadmin中执行zend创建的查询,每个查询耗时约15毫秒。也许每次我的控制器启动时都会初始化一个新连接。如何防止这种情况发生?
    public function getImage($id)
    {
        $select = $this->select()->where('id = ?', $id);
        $row = $this->fetchAll($select);//maybe a different fetch will have an effect
        return $row;
    }