Zend框架和Mysql-非常慢

Zend框架和Mysql-非常慢,mysql,zend-framework,zend-db-table,Mysql,Zend Framework,Zend Db Table,我正在使用php、mysql和zend框架创建一个网站。 当我尝试运行任何sql查询时,页面生成会跳到大约0.5秒。太高了。如果我打开sql,页面生成是0.001。 我运行的查询量并不真正影响页面生成时间(测试了1-10个查询)。保持在0.5秒 我不知道我做错了什么 我在引导中连接到sql: protected function _initDatabase () { try { $config = new Zend_Config_Ini( APPLICATION_

我正在使用php、mysql和zend框架创建一个网站。 当我尝试运行任何sql查询时,页面生成会跳到大约0.5秒。太高了。如果我打开sql,页面生成是0.001。 我运行的查询量并不真正影响页面生成时间(测试了1-10个查询)。保持在0.5秒 我不知道我做错了什么

我在引导中连接到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秒,这太长了。有什么建议吗


谢谢

对此进行调试的最简单方法是分析sql查询。您可以使用FireHP(firebug插件)参见

另一种稍微加快速度的方法是缓存表的元数据。 请参阅:

提示:

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

  • 用于分析MySQL的优化计划。它是否有效地使用索引

    mysql> EXPLAIN SELECT * FROM standard_accessory WHERE model = 'abc';
    
  • 用于测量查询的速度,而不是使用PHP。子查询必须返回单个列,因此请确保返回非索引列,以便查询必须接触数据,而不仅仅是返回索引项

    mysql> SELECT BENCHMARK(1000, 
      (SELECT nonindexed_column FROM standard_accessory WHERE model = 'abc'));
    
  • 请注意,当您进行第一次查询时,
    Zend\u Db\u适配器
    lazy将加载其数据库连接。因此,如果在连接MySQL服务器时出现任何延迟,那么在实例化表对象(当它查询元数据时)时就会发生这种情况。这可能需要很长时间吗,也许吧


除了上面的建议,我做了一个非常不科学的测试,发现PDO适配器在我的应用程序中更快(我知道mysqli应该更快,但可能是ZF抽象)。我显示结果(显示的时间仅用于比较)

并且对基准测试的查询应该返回1行,否则mysql抱怨:错误1242(21000):子查询返回超过1行。@Leonel Martins:对,我假设由于OP使用的是
find()
,所以他限制表的主键。因此,应该保证返回一行(如果找不到“abc”,则返回零行)。元数据缓存上的第一个链接现在无效,我假设它是:@KimberlyW,谢谢,我已更新了该链接,并更新到ZF 1.12的当前版本。