mysql 資料庫rand() 隨機查詢10條資料 整理
網上找了好多看了還不是很明白,為了專案進度拿過來直接用。害怕以後還需要。好找一些,放在這裡。
若要在i ≤ R ≤ j 這個範圍得到一個隨機整數R ,需要用到表示式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7 到 12 的範圍(包括7和12)內得到一個隨機整數, 可使用以下語句:
SELECT FLOOR(7 + (RAND() * 6));
以上摘抄自MySQL手冊
從 Mysql 表中隨機讀取資料不難,方法還挺多的,但是如果要考慮效率,得到一個快速的高效率的方法,那就不是一件簡單的事情了(至少對我來說不簡單)。
隨機獲得Mysql資料表的一條或多條記錄有很多方法,下面我就以users(userId,userName,password……)表(有一百多萬條記錄)為例,對比講解下幾個方法效率問題:
- select * from users order by rand() LIMIT 1
執 行該sql語句,老半天沒有反應,最後被迫手動停止執行,怎個傷人了得啊!後來我查了一下MYSQL手冊,裡面針對RAND()的提示大概意思就是,在 ORDER BY從句裡面不能使用RAND()函式,因為這樣會導致資料列被多次掃描,導致效率相當相當的低!效率不行,切忌使用! - SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(userId) FROM `users`)-(SELECT MIN(userId) FROM users))+(SELECT MIN(userId) FROM users)) AS userId) AS t2 WHERE t1.userId >= t2.userId ORDER BY t1.userId LIMIT 1
執行該sql語句,用時0.031s,效率沒說的,相當的給力!心裡那個爽啊,緊接著,我把”LIMIT 1“改為了”LIMIT 100“ 隨機取一百條記錄,用時0.048,給力吧。可是就在此時問題出現了,發現結果好像不是隨機的?為了驗證結果,又執行了N次,真不是隨機的, 問題出現在”ORDER BY t1.userId“這裡,按userId排序了。隨機取一條記錄還是不錯的選擇,多條就不行了啊! - SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1
執行該sql語句,用時0.039s,效率太給力了!接著我就把”LIMIT 1“改為了”LIMIT 10000“,用時0.063s。經過多次驗證,哥對燈發誓,結果肯定是隨機的!
結論:隨機取一條或多條記錄,方法都不錯! - 通過sql獲得最大值和最小值,然後通過php的rand生成一個隨機數randnum,再通過SELECT * FROM users WHERE userId >= randnum LIMIT 1,獲得一條記錄效率應該還可以,多條應該就不行了。
結論:方法1效率不行,切忌使用;隨機獲得一條記錄,方法2是相當不錯的選擇,採用JOIN的語法比直接在WHERE中使用函式效率還是要高一些的,不過方法3也不錯;隨機獲得多條記錄,方法3沒說的!
大家看下我的 查詢隨機 條件是 先按釋出的最新排序然後就行隨機查詢8條
$forum_data 是表名 這樣隨機查詢的效果還是很快的
$sql="SELECT * FROM ( SELECT * FROM $forum_data $where ORDER BY `dateline` DESC ) AS T WHERE pid >= ((SELECT MAX(pid) FROM $forum_data)-(SELECT MIN(pid) FROM $forum_data)) * RAND() + (SELECT MIN(pid) FROM $forum_data) LIMIT 8";
然後下面,這個是兩個表 連表查詢 然後加 where 條件 然後在隨機6條。(強調一點資料要足夠多,不然 隨機不出來那麼多資料)
$sql="SELECT aid FROM $forum_attach AS a LEFT JOIN $forum_post AS p ON a.pid=p.pid $where AND aid >= ((SELECT MAX(aid) FROM $forum_attach)-(SELECT MIN(aid) FROM $forum_attach)) * RAND() + (SELECT MIN(aid) FROM $forum_attach) LIMIT 6 ";
相關推薦
mysql 資料庫rand() 隨機查詢10條資料 整理
網上找了好多看了還不是很明白,為了專案進度拿過來直接用。害怕以後還需要。好找一些,放在這裡。若要在i ≤ R ≤ j 這個範圍得到一個隨機整數R ,需要用到表示式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7 到 12 的範圍(包括7和12
mysql隨機查詢若干條資料
在mysql中查詢5條不重複的資料,使用以下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />SELECT * FROM`table`ORDERBYRAND()
從資料庫隨機取資料 四種資料庫隨機獲取10條資料的方法
四種資料庫隨機獲取10條資料的方法 SQL Server: 程式碼如下: SELECT TOP 10 * FROM T_USER ORDER BY NEWID() ORACLE: 程式碼如下: SELECT * FROM (SELECT * FROM T_USER ORDE
mysql怎樣高效率隨機獲取n條資料
ID連續的情況下(注意不能帶where,否則結果不好): SELECT * FROM `mm_account` AS t1 JOIN ( SELECT ROUND( RAND() * ( SELECT MAX(id) FROM `mm_acco
java 使用jdbc向mysql資料庫中插入1億條資料
<span style="font-size:14px;"><span style="font-size:14px;">package com.ddx.zhang; import java.sql.SQLException; import java
資料庫中隨機查詢一條記錄的SQL
資料庫的隨機查詢SQL 1. Oracle,隨機查詢20條 select * from ( select * from 表名 order by dbms_random.value ) where rownum <= 20; 2.MS SQL Server,隨機查詢20條 select
mysql優化之資料庫隨機取一條資料
大家都知道mysql 查詢資料庫隨機取一條資料當然用rand()方法 其實這個方法是超級雞肋的,當然你愛好也無所謂,首先列舉兩個表 a表 id(主鍵 int),cardnumber(身份證號碼 char(18)),name(使用者名稱 varchar(40))
mysql隨機獲取n條資料
做秒殺時,碰到從秒殺商品中隨機取商品圖的問題,可以用order by rand() limit *隨機取出*條記錄; 例如: select gs.original_img from ecs_goods as gs where goods_id in( select goods_id
8、mysql資料庫多表查詢(資料並集、內連線、左連結、右連結、全連線)
目錄 1 內連線 場景:A和B資料 的交集 2 左連結 場景1:得到 “AB交集後和A“ 的並集 (得到A的所有資料+滿足某一條件的B的資料) 場景2:得到A減去AB的交集 (A中所有資料減去同時滿足B某一條件的資料) 3 右連結 場景1:得到“A
mysql實現隨機獲取幾條資料的方法
sql語句有幾種寫法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要獲取的資料條數; 2:SELECT *FROM `table` WHERE
MySQL資料庫學習06-查詢資料:排序和分組
一、對查詢結果排序 MySQL中可以使用ORDER BY子句對查詢到的結果進行排序。 1.單列排序 a.查詢f_name欄位,按照字母排序 2.多列排序 ORDER BY子句也可以實現對多列資料進行排序,需要將待排序的列之間用逗號隔開。對多列排序是
在MySQL中查詢某條資料的排名
//mysql可以執行,mybatis不能解析 SET @c=0; SELECT * FROM ( SELECT nurse_id,nurse_header,nurse_mark,@c:[ema
分別使用PreparedStatement和Statement對mysql資料庫進行建立表,增加資料,查詢資料和刪除資料過程
在使用eclipse工具編寫Java程式碼連線資料庫並對資料庫進行處理時,總會用到對資料的增刪改查操作。那麼這個 時候就用到了java自帶的sql庫中的PreparedStatement或者Statement了。 其實PreparedStatement和Statement使
MySql從表結果集中隨機取一條資料
部落格文章地址:http://blog.csdn.net/macwhirr123/article/details/7489484 Select * from (Select (@rowNo :[email protected]+1) AS rowno, pwd
【面經】面試官:如何以最高的效率從MySQL中隨機查詢一條記錄?
## 寫在前面 > MySQL資料庫在網際網路行業使用的比較多,有些小夥伴可能會認為MySQL資料庫比較小,儲存不了很多的資料。其實,這些小夥伴是真的不瞭解MySQL。MySQL的小不是說使用MySQL儲存的資料少,而是說其體積小,比較輕量。使用MySQL完全可以儲存千億級別的資料,這個我會在後面的文
恢復 MySQL 資料庫人為誤操作丟失的資料
1. 全量備份與增量備份理論基礎 1.1 全量備份 全量資料就是資料庫中的所有資料,全量備份就是把資料庫中所有的資料進行備份。 1.2 增量備份 增量資料就是從上次全量備份之後,到下一次全備之前時間段更新的新資料。對於 MySQL 來說,binlog 日誌就是 MySQL 的增量資料。 1.3 按天
mysql資料庫中的bit是何種資料型別?
Bit稱為位資料型別,其資料有兩種取值:0和1,長度為1位。在輸入0以外的其他值時,系統均把它們當1看待。這種資料型別常作為邏輯變數使用,用來表示真、假或是、否等二值選擇。 SQL Server中儲存資料的一種型別,只能儲存true/false,程式讀取資料庫出來之後的表現形式是true或者fals
MySQL資料庫實驗:任務二 表資料的插入、修改及刪除
目錄 任務二 表資料的插入、修改及刪除 一、利用介面工具插入資料 二、資料更新 (一)利用MySQL命令列視窗更新資料 (二)利用Navicat for MySQL客戶端工具更新資料 三、資料庫的備份與還原
C# NetCore使用AngleSharp爬取周公解夢資料 MySql資料庫的自動建立和頁面資料抓取
這一章詳細講解編碼過程 那麼接下來就是碼程式碼了,GO 新建NetCore WebApi專案 空的就可以 NuGet安裝 Install-Package AngleSharp 或者介面安裝 using。。 預設本地裝有
mysql資料庫bom空格查詢及去除
bom空格佔三個字元 以訂單為例,匯入的訂單有時候訂單編號含有bom空格,列印賬單時賬單檔名亂碼,找不到對應賬單,404。,每種型別的訂單訂單編號是有固定長度的。 select distinct t.`order_type`,length(t.`order_no`) from `