我有一個查詢可以在數據庫中選擇6個名稱。例如在mySql查詢中獲取隨機值
SELECT names FROM users LIMIT 6
現在我想這個查詢數據庫中的表中選擇一個隨機的6名,這可能嗎?而簡單,但速度慢的解決方案如何
我有一個查詢可以在數據庫中選擇6個名稱。例如在mySql查詢中獲取隨機值
SELECT names FROM users LIMIT 6
現在我想這個查詢數據庫中的表中選擇一個隨機的6名,這可能嗎?而簡單,但速度慢的解決方案如何
是:
SELECT names FROM users ORDER BY RAND() LIMIT 6
這使用隨機數進行排序,並具有爲O(n log n)的服務表現。它應該運行良好說10000行,但對於較大的表,它不會很好地擴展。
想要更快得到它,你可以看看Quassnoi的文章MySQL: selecting a number of random rows fast。
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 6
FROM users
) vars
STRAIGHT_JOIN
(
SELECT names,
@lim := @lim - 1
FROM users r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim/@cnt
) i
這具有O(n)性能。
SELECT names
FROM users
ORDER BY RAND()
LIMIT 6
這裏是一個其他快速解決方案
Select names from users WHERE RAND() LIMIT 6
這可能是快,但它不是正確。它會給你6行,但它們是*不*隨機的。 – 2010-05-05 19:44:38
相關:http://stackoverflow.com/questions/1823306/alerternative-to-mysql-order-by-rand – 2010-05-05 19:23:58