如果id 是 數(shù)組
可以參考 mysql 手冊給的 demon
http://www.mysqltutorial.org/select-random-records-database-table.aspx
如果id 不是數(shù)字懂更,比如字符串
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;
隨機(jī)找10條數(shù)據(jù)
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
結(jié)果
數(shù)據(jù)庫中有5W數(shù)據(jù)
Time: 0.161s
通過代碼分多步實(shí)現(xiàn)
當(dāng)數(shù)據(jù)量大的時(shí)候還是推薦此方法
SELECT COUNT(t.id)
from card_collect t;
得到總數(shù)后眨业,通過 j程序方法 算出 頁和size
SELECT t.id , t.user_id
from card_collect t
limit 7000,10;
但是此方法拿到的是一頁內(nèi) 連續(xù)的數(shù)據(jù)
測試下來
Time: 0.036
性能好了很多。