Yii activerecord和pagination count()慢查询

ine*_*rsa 2 mysql activerecord yii

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

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

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

我感谢任何帮助.谢谢.

Mic*_*rtl 8

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

$count = Yii::app()->db->createCommand('SELECT COUNT(*)...')->queryScalar();
$provider = new CActiveDataProvider('SomeModel', array(
    'totalItemCount' => $count,
    'criteria' => $criteria,
    ...
Run Code Online (Sandbox Code Playgroud)