MySQL随机查询记录的效率测试分析_MySQL
bitsCN.com
以下就是文章的主要内容。
1.SELECT * FROM `table` ORDER BY RAND() LIMIT 5
就可以了。
但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上
查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。
1.SELECT *
2.FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
3.WHERE t1.id >= t2.id
4.ORDER BY t1.id ASC LIMIT 5;
但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。
上面的语句采用的是JOIN,MySQL的论坛上有人MySQL使用
1.SELECT *
2.FROM `table`
3.WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
4.ORDER BY id LIMIT 1;
我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。
于是我把语句改写了一下。
1.SELECT * FROM `table`
2.WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
3.ORDER BY id LIMIT 1;
这下,效率又提高了,查询时间只有0.01秒
最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
完整查询语句是:
1.SELECT * FROM `table`
2.WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
3.ORDER BY id LIMIT 1;
4.SELECT *
5.FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
6.WHERE t1.id >= t2.id
7.ORDER BY t1.id LIMIT 1;
最后在php中对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒
看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多。以上的相关内容就是对MySQL使用rand随机查询记录效率测试的介绍,望你能有所收获。bitsCN.com

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

拼多多軟體內提供的商品好物非常多,隨時隨地想買就買,而且每一件商品品質都是嚴格把關的,件件商品都是正品,不同還有非常多優惠的購物折扣,讓大家網購根本停不下來。輸入手機號碼在線登錄,在線添加多個收貨地址和聯繫方式,可以隨時查看最新的物流動態,不同品類的商品板塊都是開放的,搜索上下滑動選購下單,足不出戶輕鬆體驗便捷的網購服務,還能查看所有的購買記錄,包括自己買過的商品,數十個購物紅包、優惠券免費領取使用,現在小編在線詳細為拼多多用戶們帶來查看買過的商品記錄的方法。 1.打開手機,點選拼多多圖標,

一、今日頭條發布文章怎麼有收益?今日頭條發布文章獲得更多收益方法! 1.開通基礎權益:原創文章選擇投放廣告可獲得收益,影片必須原創橫屏才會有收益。 2.開通百粉權益:粉絲量達百粉以上,微頭條、原創問答創作及問答均可獲得收益。 3.堅持原創作品:原創作品包含文章、微標題及問題等,要求300字以上。注意違規抄襲作品作為原創發布,會被扣信用分,即使有收益也會被扣除。 4.垂直度:做專業領域一類的文章,不能隨意跨領域寫文章,會得不到合適的推薦,達不到作品的專和精,難以吸引粉絲讀者。 5.活躍度:活躍度高,

如何在Linux中查看命令歷史記錄在Linux中,我們使用history命令來查看所有先前執行的命令的清單。它有一個非常簡單的語法:history與歷史記錄命令配對的一些選項包括:選項描述-c清除當前會話的命令歷史記錄-w將命令歷史記錄寫入檔案-r從歷史記錄檔案重新載入命令歷史記錄-n限制最近命令的輸出數量只需執行history命令即可在Linux終端機中查看所有先前執行的命令的清單:除了查看命令歷史記錄之外,您還可以管理命令歷史記錄並執行修改先前執行的命令、反向搜尋指令歷史記錄甚至完全刪除歷史記

iPhone中的通話記錄經常被低估,並且是iPhone最關鍵的功能之一。憑藉其簡單性,此功能具有至關重要的意義,可提供有關在裝置上撥打或接聽的通話的重要見解。無論是出於工作目的還是法律訴訟,存取通話記錄的能力都被證明是無價的。簡單來說,通話記錄是指每當撥打或接聽電話時在iPhone上建立的條目。這些日誌包含關鍵訊息,包括聯絡人的姓名(如果未另存為聯絡人,則為號碼)、時間戳記、持續時間和呼叫狀態(已撥打、未接聽或未接聽)。它們是您的通訊歷史記錄的簡明記錄。通話記錄包括儲存在iPhone上的通話記錄條

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

C#開發建議:日誌記錄與監控系統摘要:在軟體開發過程中,日誌記錄與監控系統是至關重要的工具。本文章將介紹C#開發中日誌記錄與監控系統的作用與實施建議。引言:在大型軟體開發專案中,日誌記錄和監控是不可或缺的工具。它們可以幫助我們即時了解程式運行狀況,快速發現並解決問題。本文將討論C#開發中如何使用日誌記錄和監控系統,以提高軟體品質和開發效率。日誌記錄系統的作用

如何進行Java開發專案的日誌記錄與監控一、背景介紹隨著網路的快速發展,越來越多的企業開始進行Java開發,建構各種類型的應用程式。而在開發過程中,日誌記錄和監控是一個不可忽視的重要環節。透過日誌記錄與監控,開發人員可以及時發現和解決問題,確保應用程式的穩定性和安全性。二、日誌記錄的重要性1.問題追蹤:在應用程式發生錯誤時,日誌記錄可以幫助我們快速定位問題

如何在Safari中清除iPhone歷史記錄?要清除Apple的Safari上的瀏覽和搜尋記錄,您需要在裝置上開啟「設定」應用程式。選擇「設定」後,您需要向下捲動並選擇Safari,然後將顯示另一個選單,您需要選擇清除歷史記錄和網站資料。現在您需要從選單中選擇清除歷史記錄和數據,這將從Apple的Safari瀏覽器中刪除所有搜尋記錄,瀏覽歷史記錄,cookie和數據。就是這樣,所有先前的瀏覽記錄和搜尋記錄現在都已從Safari中刪除。如果您不想刪除Safari中的所有搜尋記錄
