MySQL如何從表中取出隨機資料

2021-08-31 05:31:13 字數 1024 閱讀 6077

原來都想用php的實現隨機,但取出多條好像要進行兩次以上查詢.最近我從mysql手冊中,找到了下面這個語句,可以完成任務

select * from table_name order by rand() limit 5;

rand在手冊裡是這麼說的:

rand()

rand(n)

返回在範圍0到1.0內的隨機浮點值。如果乙個整數引數n被指定,它被用作種子值。

mysql> select rand();

-> 0.5925

mysql> select rand(20);

-> 0.1811

mysql> select rand(20);

-> 0.1811

mysql> select rand();

-> 0.2079

mysql> select rand();

-> 0.7888

你不能在乙個order by子句用rand()值使用列,因為order by將重複計算列多次。然而在mysql3.23中,你可以做: select * from table_name order by rand(),這是有利於得到乙個來自select * from table1,table2 where a=b and c的集合的隨機樣本。注意在乙個where子句裡的乙個rand()將在每次where被執行時重新評估。

但我試了一下,8千條記錄的表,執行一次需要0.08 sec,.慢了些

後來請教了google,得到如下**

select *

from table_name as r1 join

(select round(rand() *

(select max(id)

from table_name)) as id)

as r2

where r1.id >= r2.id

order by r1.id asc

limit 5;

執行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支援這樣的子查詢.

MySQL 如何從表中取出隨機資料

select from table name order by rand limit 5 rand在手冊裡是這麼說的 rand rand n 返回在範圍0到1.0內的隨機浮點值。如果乙個整數引數n被指定,它被用作種子值。mysql select rand 0.5925 mysql select ra...

MySQL 如何從表中取出隨機資料

以前在群裡討論過這個問題,比較的有意思.mysql的語法真好玩.他們原來都想用php的實現隨機,但取出多條好像要進行兩次以上查詢.翻了手冊,找到了下面這個語句,可以完成任務了 select from table name order by rand limit 5 rand在手冊裡是這麼說的 ran...

MySQL實現表中取出隨機資料

一直以為mysql隨機查詢幾條資料,就用 select from table order by rand limit 5 就可以了。但是真正測試一下才發現這樣效率非常低。乙個15萬餘條的庫,查詢5條資料,居然要8秒以上 檢視官方手冊,也說rand 放在order by 子句中會被執行多次,自然效率及...