Php Yii应用程序日志中有计数(*)

Php Yii应用程序日志中有计数(*),php,yii,Php,Yii,当运行SELECT查询时,Yii似乎经常对每个查询执行两次。第一个是COUNT(),第二个是实际查询 这是什么原因造成的?这似乎效率极低 在一个相关的注释中,为什么Yii如此频繁地执行SHOW COLUMNS FROM和SHOW CREATE表?在模型中设置关系是否足以告诉Yii有关模式的信息?我假设您经常将活动记录与列表小部件(如CGridView和CListView)结合使用 这是什么原因造成的?这似乎效率极低 好的,为了使分页在CListView和CGridView中工作,分配的cacti

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

这是什么原因造成的?这似乎效率极低


在一个相关的注释中,为什么Yii如此频繁地执行SHOW COLUMNS FROM和SHOW CREATE表?在模型中设置关系是否足以告诉Yii有关模式的信息?

我假设您经常将活动记录与列表小部件(如
CGridView
CListView
)结合使用

这是什么原因造成的?这似乎效率极低

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

在一个相关的注释中,为什么Yii如此频繁地执行SHOW COLUMNS FROM和SHOW CREATE表?在模型中建立一个关系不足以告诉Yii关于模式的信息吗

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

  • components
    节中的
    protected/config/main.php
    中配置缓存组件,例如
    CApcCache
  • 更改
    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.
    
  • 一句忠告;在开发环境中不要这样做:如果数据库设计发生更改,AR模型可能会由于过时的缓存而无法反映这一点