如何优化查询以查找大表的随机值

时间:2014-04-15 16:13:59

标签: mysql symfony doctrine-orm

class ImageRepository extends EntityRepository
{
    public function findAllNewestByVotes()
    {
        return $this->getEntityManager()
        ->createQuery(
            'SELECT p FROM GabrielUploadBundle:Image p WHERE p.upvotes > 50 ORDER BY p.createdAt ASC')
        ->getResult();
    }
}

我只需要来自GabrielUploadBundle的10到20张随机图片:图片中upvotes超过50,此时它只按日期排序(createdAt)。 我知道这可以用RAND()来解决,但不推荐用于大型表。

1 个答案:

答案 0 :(得分:0)

我会在以下四个步骤中执行此操作:

  • 选择投票数超过50的所有记录的ID

  • 随机播放数组

  • 将数组切割为您需要的大小

  • 使用您使用IN子句

  • 在新选择中获得的ID