mysql怎樣高效率隨機獲取n條資料
阿新 • • 發佈:2018-11-20
ID連續的情況下(注意不能帶where,否則結果不好):
SELECT
*
FROM
`mm_account` AS t1
JOIN (
SELECT
ROUND(
RAND() * (
SELECT
MAX(id)
FROM
`mm_account`
)
) AS id
) AS t2
WHERE
t1.id >= t2.id
ORDER BY
t1.id ASC
LIMIT 4;
ID不連續的情況下:
SELECT * FROM `mm_account` WHERE id >= ( SELECT floor( RAND() * ( SELECT MAX(id) FROM `mm_account` ) ) ) and city = "city_91" AND showSex = 1 ORDER BY id LIMIT 4;
假設你的表叫做mm_account,並且有一個欄位叫id。最快的方法如下(隨機獲取5條):
SELECT
*
FROM
mm_account
WHERE
id >= (
(
SELECT
MAX(id)
FROM
mm_account
) - (
SELECT
MIN(id)
FROM
mm_account
)
) * RAND() + (
SELECT
MIN(id)
FROM
mm_account
)
LIMIT 5;
如果帶where語句,上面就不適合了。帶where語句請看下面:
SELECT * FROM `mm_account` AS t1 JOIN ( SELECT ROUND( RAND() * ( ( SELECT MAX(id) FROM `mm_account` WHERE id < 1000 ) - ( SELECT MIN(id) FROM `mm_account` WHERE id < 1000 ) ) + ( SELECT MIN(id) FROM `mm_account` WHERE id < 1000 ) ) AS id ) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 5;
原文:https://blog.csdn.net/zwc2xm/article/details/79467829