mysql随机取出n条数据

17-09-12 16:25 字数 389 阅读 3488

现在有个需求要随机从一种百万记录的表中取出15条数据
最简单的做法是order by rand() limit 15,但是这样的效率不是很高。所以找到了下边的这个方法

$ids = array();
$sql = "select id from tableName WHERE addDate = '{$date}' AND status = '1'";
$res = $db->select($sql);
if (!empty($res)) {
    foreach ($res as $row) {
        array_push($ids, $row['id']);
    }
    shuffle($ids);
    $ids = array_slice($ids, 0, 15);
}
$ids = rtrim(implode(",", $ids), ",");
$sql = "select * from tableName WHERE id in ({$ids})";
$res = $db->select($sql);
0人点赞>
关注 收藏 改进 举报
2 条评论
排序方式 时间 投票
赤羽飞鸿

那有没有考虑过第一条sql语句所使用的时间。2条sql语句使用的时间,可能就大于order by rand() limit 15时间了。

叶秋
@赤羽飞鸿 order by rand() 会全表扫描、在数据量大的时候性能肯定是不行的。
请登录后发表评论