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

标签 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:Image 的 10 到 20 张随机图片,其中点赞数超过 50,目前仅按日期 (createdAt) 排序。 我知道这可以用 RAND() 来解决,但不建议将其用于大型表。

最佳答案

我将通过以下四个步骤来完成此操作:

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

  • 打乱数组

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

  • 使用您在带有 IN 子句的新 select 中获得的 ID

关于mysql - 如何优化查询以查找大型表的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089138/

相关文章:

mysql - 在 Rails 中添加多条记录

php - 错误输出 SQL 脚本, 'date' 的默认值无效

php - Symfony 包继承 - 如何覆盖/扩展服务类

mysql - UniqueEntity 验证失败 - Symfony?

mysql - 如何在没有 "real"外键的情况下获取加入 Doctrine?

mysql - 使用查询生成器进行复杂的连接查询

phpmyadmin 与 xampp 一起失败

c# - 使用 INSERT 将十进制数从 DataGridView 插入 MySQL

php - Symfony2 用户切换后缺少 ROLE_PREVIOUS_ADMIN

symfony - 如何使用 bucle 通过 Doctrine DQL 搜索数组单词