Yii应用程序日志乱丢COUNT(*)

时间:2013-11-22 23:35:25

标签: php yii

当运行SELECT查询时,好像Yii经常执行两次查询。第一个是COUNT(),第二个是实际查询。

造成这种情况的原因是什么?这看起来非常低效。

在相关的说明中,为什么Yii经常执行SHOW COLUMNS FROM和SHOW CREATE TABLE?不在模型中建立关系告诉Yii关于模式吗?

1 个答案:

答案 0 :(得分:3)

我假设您正在使用有效记录以及CGridViewCListView等列表小部件。

  

造成这种情况的原因是什么?这看起来非常低效。

好吧,为了使分页在CListViewCGridView中工作,分配的CActiveDataProvider(或实际上任何数据提供者)需要获取总项目数。这不适用于通常应用LIMIT子句的结果集。因此,执行额外的COUNT()来检索所述号码。

  

在相关的说明中,为什么Yii经常执行SHOW COLUMNS FROM和SHOW CREATE TABLE?不在模型中建立关系告诉Yii关于模式吗?

没有。 Yii远不止管理相关模型。 AR抽象层的一部分还用于确定表中可用的字段,因此可以在表示表行的模型上访问。但是,您不必忍受这种情况,因为可以方便地缓存模式。为此,请按照下列步骤操作:

  1. CApcCache节的protected/config/main.php中配置components等缓存组件。
  2. 更改db组件的配置,使其包含以下行:

    'schemaCacheId'=>'cache',    // This is the name of the cache component you
                                 // configured in step 1. It's also the default value.
    'schemaCacheDuration'=>3600, // Cache table schemata for an hour.
                                 // Set this higher if you like.
    
  3. 建议;不要在开发环境中执行此操作:如果数据库设计发生更改,AR模型可能不会因过时的缓存而反映此情况。