Yii activerecord和pagination count()慢查询

时间:2013-05-17 13:27:17

标签: mysql activerecord yii

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

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

至少totalItemCount我们可以使用EXPLAIN SELECT *。它的方式更快。<​​/ p>

我感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:8)

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

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