mysql 隨機查詢 記錄集

来源:http://www.cnblogs.com/drcoding/archive/2016/03/28/5329294.html
-Advertisement-
Play Games

有時候需求需要隨機從資料庫查詢若幹條記錄集,網上搜了一下,幾篇博文都是些重覆的.....不知道他們誰抄的誰的,這裡除了介紹提供一種筆者自己想到的方法,本質都是利用mysql 的rand() 第一種方法: SELECT * FROM reportcard_patient_temp ORDER BY R ...


  有時候需求需要隨機從資料庫查詢若幹條記錄集,網上搜了一下,幾篇博文都是些重覆的.....不知道他們誰抄的誰的,這裡除了介紹提供一種筆者自己想到的方法,本質都是利用mysql 的rand()

   第一種方法:

   SELECT * FROM reportcard_patient_temp ORDER BY RAND() LIMIT 10

   利用mysql的隨機函數order by,這是最容易想到的,筆者在mysql 5.6.27上面explain查看了執行計劃 :

+----+-------------+-------------------------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------------+------+---------------+------+---------+------+------+---------------------------------+
| 1 | SIMPLE | reportcard_patient_temp | ALL | NULL | NULL | NULL | NULL | 2479 | Using temporary; Using filesort |
+----+-------------+-------------------------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set

可以看出select type 是simple(這裡是單表),在近40萬的數據隨機取了10條時間也只有1.2秒左右,還是可以接受的,並沒有像網上說的哪有要重覆查詢多次。

 

 第二種

SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 10;

這種方法最大的弊端在於如果主鍵不是自增的該如何?當然在主鍵自增的時候還是可以使用的

 

 第三種,這是筆者自己想出的方法,既然要利用mysql自帶的隨機函數,那麼對於不是自增的主鍵,如何把轉化rand()就成了問題的關鍵,利用count(*)這個整數集

SELECT * FROM (
SELECT zyid ,ROUND(COUNT(*)*RAND()*100) AS newno FROM yw_syjgb GROUP BY zyid
)AS t ORDER BY t.newno asc LIMIT 10

同樣的40萬的記錄集,隨機取10條記錄,時間只需要0.2秒左右,可以說比order by rand()提升還是蠻大的,當然也是可以 把 ROUND(COUNT(*)*RAND()*100) AS newno 作為limit後面的值隨機定位記錄集,需要註意的是記錄數當然是得大於100,如果小於100,哈哈除以10或者100不就行了嘛。

 

 基於資料庫層隨機查詢的還有些很多零碎的方法,這裡筆者覺得符合自身業務復的方法其實還很多,比如你可以在程式里做隨機挑選演算法,或者自己實現一個rand()函數。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在弄一個視頻會議的項目,但今天要說的跟視頻基本沒關係,我們來說一下在一個view中創建一個button,在controller中載入這個view 當button被點擊後將時間響應傳遞給controller,去做其他修改 大致就是這個環境下,我們很快想到用代理,當然可以,這裡不闡述代理的實現過程我 ...
  • 一開始在剛接觸到Alert和ActionSheet的時候,經常傻傻分不清楚,好不容易用習慣了,蘋果又給合併了,好在用起來也不困難,到底哪個好呢?見仁見智吧! 現在稍微介紹一下怎麼用。 1.初始化,一般用這個類方法 最後一個參數是個枚舉類型,有兩個值,分別就是Alert和ActionSheet 2.推 ...
  • 一,代碼。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"現在所在的周:%@",[self get ...
  • 示例:(在storyboard中拖兩個控制項textField、一個UIButton,連線(userNameText、password、login)) @interface ViewController() @property(nonatomic,weak)IBOutlet UITextField * ...
  • 何為Service Service,俗名服務。在Android系統中,Service與Activity就像一個媽生的,不僅長得像,而且行為(生命周期)也有一些類似。對於Activity來說大家肯定不會陌生,開發Android應用中打過交道最多的莫非就是Activity了,所以今天我們藉助Activi ...
  • 第一種:(最簡單的NSDate) 第二種:(將運行代碼放入下麵的Block中,返回時間) 第三種: ...
  • 在沈大神的慫恿下,開始寫博客; 希望這是我成為大神的起點(笑); 既然已經說了這周要寫一篇博客,那熬夜也得寫完; 先開始梳理下這9個月的收穫吧; 這幾個月幹了啥: 1.開發了N個聯運版本,接入了N個SDK; 2.寫了個聯運工程及其文檔,專門用來接入SDK,從現在效果來看,很不錯,新來的實習生接入速度 ...
  • MySQL有三個版本:二進位,源碼包,RPM。 下麵講講二進位包的安裝過程 下載地址: http://dev.mysql.com/downloads/mysql/ 選擇Linux-Generic 我這裡選擇的是mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz 解壓後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...