当前位置:  开发笔记 > 编程语言 > 正文

Zend Framework和Mysql - 非常慢

如何解决《ZendFramework和Mysql-非常慢》经验,为你挑选了1个好方法。

我正在使用php,mysql和zend框架创建一个网站.当我尝试运行任何sql查询时,页面生成跳转到大约0.5秒.那太高了.如果我转向sql,页面生成为0.001.我运行的查询量并不会真正影响页面生成时间(测试的1-10个查询).在0.5秒停留我无法弄清楚,我做错了什么.

我在bootstrap中连接到sql:

protected function _initDatabase ()
{
    try
    {
        $config = new Zend_Config_Ini( APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV );
        $db = Zend_Db::factory( $config -> database);
        Zend_DB_Table_Abstract::setDefaultAdapter( $db );
    }
    catch ( Zend_Db_Exception $e )
    {

    }
}

然后我有一个简单的模型

class StandardAccessory extends Zend_DB_Table_Abstract
{
    /**
     * The default table name 
     */
    protected $_name = 'standard_accessory';

    protected $_primary = 'model';

    protected $_sequence = false;
}

最后,在我的索引控制器中,我只运行find方法.

require_once APPLICATION_PATH . '/models/StandardAccessory.php';
    $sa = new StandardAccessory( );
    $stndacc = $sa->find( 'abc' );

所有这些都需要约0.5秒,这太长了.有什么建议?

谢谢!



1> Bill Karwin..:

提示:

缓存表元数据.默认情况下,Zend_Db_Table每次实例化表对象时都尝试发现有关表的元数据.使用缓存可以减少执行此操作的次数.或者在Table类中对其进行硬编码(注意:db表不是模型).

使用EXPLAIN分析MySQL的优化方案.它是否有效地使用索引?

mysql> EXPLAIN SELECT * FROM standard_accessory WHERE model = 'abc';

使用BENCHMARK()测量查询的速度,不使用PHP.子查询必须返回单个列,因此请确保返回非索引列,以便查询必须触摸数据而不是仅返回索引条目.

mysql> SELECT BENCHMARK(1000, 
  (SELECT nonindexed_column FROM standard_accessory WHERE model = 'abc'));

请注意,Zend_Db_Adapter在进行第一次查询时,延迟加载其数据库连接.因此,如果连接到MySQL服务器有任何缓慢,那么当您实例化Table对象时(当它查询元数据时)就会发生这种情况.这可能需要很长时间吗? 也许是DNS查找?

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有