3

所以基本上问题在于在activedataproviderSELECT COUNT(*)的函数中执行的查询。calculateTotalItemCount据我了解,它需要对$itemcount变量进行分页。问题是这个查询对于大表来说很慢。对于我的 ~30m 表,它执行 5 秒。所以有两种方法可以解决这个问题: 1.禁用分页('pagination'=>'false')并编写自己的分页。2.重写AR计数功能。

我没有足够的经验/知识来完成这个。也许有人以前遇到过同样的问题,可以分享他的解决方案。

至少totalItemCount我们可以使用EXPLAIN SELECT *. 它的方式更快。

我很感激任何帮助。谢谢你。

4

1 回答 1

10

如果您在原始 SQL 中的查询比活动记录自动创建的查询“便宜”,您还可以手动查询(例如通过 DAO)并totalItemCount在您的数据提供者上设置:

$count = Yii::app()->db->createCommand('SELECT COUNT(*)...')->queryScalar();
$provider = new CActiveDataProvider('SomeModel', array(
    'totalItemCount' => $count,
    'criteria' => $criteria,
    ...
于 2013-05-17T13:36:22.060 回答