Slim框架快速从500K行中选择30个随机行

时间:2015-05-04 17:02:35

标签: php sql

我是瘦身框架的新手,我使用这个PHP代码来获取随机项目

function getItems()
    {
    $app = \Slim\Slim::getInstance();
    try {
        $items = \ORM::for_table('item')->order_by_expr('rand()')->limit(30)->find_array();
        } catch (Exception $e) {
        $app->firephp->error($e);
        $items = array();
        }

    return array(
        'Items' => $items
    );
    }

但这是如何让我获得快速结果?

谢谢。

1 个答案:

答案 0 :(得分:1)

你不能。

当您使用ORDER BY RAND()时,加载然后按随机化函数排序整个结果集,然后然后将结果限制为30.您的查询从根本上来说效率低下。

您可以更好地从表中获取所有ID,在结果数组上使用shuffle,然后使用array_slice获取随机化结果的前30个ID。或者您可以在循环中使用array_rand三十次来构建选择数组。然后可以在某种WHERE IN子句中使用它。

另一个选项是子查询,只选择在子查询中随机排序的ID。