如果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
结果

数据库中有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
性能好了很多。
网友评论