Mysql随机查询N条数据

如果id 是 数组

可以参考 mysql 手册给的 demon
http://www.mysqltutorial.org/select-random-records-database-table.aspx

如果id 不是数字,比如字符串

CREATE TABLE `card_collect` (
  `id` char(36) NOT NULL,
  `card_id` char(36) NOT NULL,
  `user_id` char(36) DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `index_card_collect_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

随机找10条数据

SELECT *
FROM 
(
    SELECT ROUND(RAND() * (
            SELECT COUNT(id)
            FROM card_collect
        )) AS random_num
    FROM card_collect
    LIMIT 10
)  as b 
INNER JOIN 
 (
        SELECT @rowid := @rowid + 1 AS rowid, aa.id
        FROM card_collect aa, (
                SELECT @rowid := 0
            ) init
    )  as c 
on 
 b.random_num = c.rowid

结果


image.png

数据库中有5W数据
Time: 0.161s

通过代码分多步实现

当数据量大的时候还是推荐此方法

SELECT COUNT(t.id)
from card_collect t;

得到总数后,通过 j程序方法 算出 页和size

SELECT t.id , t.user_id
from card_collect t
limit 7000,10;

但是此方法拿到的是一页内 连续的数据

测试下来
Time: 0.036
性能好了很多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。