MySQL取出隨機數(shù)據(jù)
他們原來都想用PHP的實現(xiàn)隨機,但取出多條好像要進行兩次以上查詢.
翻了手冊,找到了下面這個語句,可以完成任務(wù)了,但效率較低
SELECT * FROM table_name ORDER BY rand() LIMIT 5;
rand在手冊里是這么說的:
RAND()
RAND(N)
返回在范圍0到1.0內(nèi)的隨機浮點值。如果一個整數(shù)參數(shù)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將重復(fù)計算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),這是有利于得到一個來自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的隨機樣本。注意在一個WHERE子句里的一個RAND()將在每次WHERE被執(zhí)行時重新評估。
但我試了一下,8千條記錄的表,執(zhí)行一次需要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;
執(zhí)行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持這樣的子查詢.
下面是其它網(wǎng)友的補充:
select id from zhyx_items order by rand() 這樣效率太低了
優(yōu)化sql語句之后:
SELECT t1.id FROM zhyx_items AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM zhyx_items)-(SELECT MIN(id) FROM zhyx_items))+ (SELECT MIN(id) FROM zhyx_items)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 0,5;
- mysql隨機查詢?nèi)舾蓷l數(shù)據(jù)的方法
- MYSQL隨機抽取查詢 MySQL Order By Rand()效率問題
- MySQL查詢隨機數(shù)據(jù)的4種方法和性能對比
- SQL 隨機查詢 包括(sqlserver,mysql,access等)
- 數(shù)據(jù)庫查詢排序使用隨機排序結(jié)果示例(Oracle/MySQL/MS SQL Server)
- 從MySQL數(shù)據(jù)庫表中取出隨機數(shù)據(jù)的代碼
- mysql獲取隨機數(shù)據(jù)的方法
- MySQL中隨機生成固定長度字符串的方法
- php隨機取mysql記錄方法小結(jié)
- MySQL 隨機函數(shù)獲取數(shù)據(jù)速度和效率分析
相關(guān)文章
Mysql日期格式以及內(nèi)置日期函數(shù)用法詳解
MySQL中有多種數(shù)據(jù)類型可以用于日期和時間的表示,這篇文章主要給大家介紹了關(guān)于Mysql日期格式以及內(nèi)置日期函數(shù)用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05
mysql left join快速轉(zhuǎn)inner join的過程
inner join內(nèi)連接,顯示兩個表中有聯(lián)系的所有數(shù)據(jù)而left join,左鏈接,以左表為參照,顯示所有數(shù)據(jù),右表中沒有則以null顯示,本文重點給大家講解mysql left join快速轉(zhuǎn)inner join的過程,需要的朋友參考下吧2021-06-06
MySQL觸發(fā)器實現(xiàn)兩表數(shù)據(jù)同步的代碼詳解
在數(shù)據(jù)庫應(yīng)用中,我們經(jīng)常需要對數(shù)據(jù)進行某些操作,并在操作完成后進行相應(yīng)的處理,這時候,可以使用觸發(fā)器來實現(xiàn)這些功能,MySQL提供了強大的觸發(fā)器功能,本文將給大家詳細介紹MySQL觸發(fā)器實現(xiàn)兩表數(shù)據(jù)同步,需要的朋友可以參考下2023-12-12

