欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql隨機查詢若干條數(shù)據(jù)的方法

 更新時間:2013年10月19日 21:27:34   作者:  
這篇文章主要介紹了mysql中獲取隨機內容的方法,需要的朋友可以參考下

在mysql中查詢5條不重復的數(shù)據(jù),使用以下:

復制代碼 代碼如下:

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

就可以了。但是真正測試一下才發(fā)現(xiàn)這樣效率非常低。一個15萬余條的庫,查詢5條數(shù)據(jù),居然要8秒以上
搜索Google,網上基本上都是查詢max(id) * rand()來隨機獲取數(shù)據(jù)。

復制代碼 代碼如下:

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是這樣會產生連續(xù)的5條記錄。解決辦法只能是每次查詢一條,查詢5次。即便如此也值得,因為15萬條的表,查詢只需要0.01秒不到。
上面的語句采用的是JOIN,mysql的論壇上有人使用

復制代碼 代碼如下:

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

我測試了一下,需要0.5秒,速度也不錯,但是跟上面的語句還是有很大差距??傆X有什么地方不正常。
于是我把語句改寫了一下。

復制代碼 代碼如下:

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

這下,效率又提高了,查詢時間只有0.01秒
最后,再把語句完善一下,加上MIN(id)的判斷。我在最開始測試的時候,就是因為沒有加上MIN(id)的判斷,結果有一半的時間總是查詢到表中的前面幾行。
完整查詢語句是:

復制代碼 代碼如下:

SELECT * FROM `table`
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`))) 
ORDER BY id LIMIT 1;
SELECT *
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
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;

最后對這兩個語句進行分別查詢10次,
前者花費時間 0.147433 秒
后者花費時間 0.015130 秒
看來采用JOIN的語法比直接在WHERE中使用函數(shù)效率還要高很多。

相關文章

  • MySQL5.7.20解壓版安裝和修改root密碼的教程

    MySQL5.7.20解壓版安裝和修改root密碼的教程

    這篇文章主要介紹了MySQL5.7.20解壓版安裝和修改root密碼的教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • mysql觸發(fā)器實時檢測一條語句進行備份刪除思路詳解

    mysql觸發(fā)器實時檢測一條語句進行備份刪除思路詳解

    遇到過這樣一個需求,在一張表里會不時出現(xiàn) “違規(guī)” 字樣的字段,需要在出現(xiàn)這個字段的時候,把整行的數(shù)據(jù)刪掉,針對這個需求我們該如何操作呢,下面跟隨小編看下mysql觸發(fā)器實時檢測一條語句進行備份刪除的解決思路,一起看看吧
    2021-09-09
  • centos 7安裝mysql5.5的方法

    centos 7安裝mysql5.5的方法

    這篇文章主要介紹了centos 7安裝mysql5.5的方法,需要的朋友可以參考下
    2015-09-09
  • MySQL安全策略(MySQL安全注意事項)

    MySQL安全策略(MySQL安全注意事項)

    這篇文章主要介紹了MySQL安全策略(MySQL安全注意事項),需要的朋友可以參考下
    2016-05-05
  • 在ubuntu中重置mysql服務器root密碼的方法

    在ubuntu中重置mysql服務器root密碼的方法

    在ubuntu下安裝了mysql 5 server,結果不知道什么原因,安裝時輸入的root帳號密碼在使用時無論如何都不能通過數(shù)據(jù)庫服務器的驗證。無奈只有重置mysql的root帳號密碼。查了一下,用了以下方法成功的重置了root帳號密碼
    2012-10-10
  • mysql中判斷記錄是否存在方法比較

    mysql中判斷記錄是否存在方法比較

    把數(shù)據(jù)寫入到數(shù)據(jù)庫的時,常常會碰到先要檢測要插入的記錄是否存在,然后決定是否要寫入。
    2011-07-07
  • mysql連接的空閑時間超過8小時后 MySQL自動斷開該連接解決方案

    mysql連接的空閑時間超過8小時后 MySQL自動斷開該連接解決方案

    MySQL 的默認設置下,當一個連接的空閑時間超過8小時后,MySQL 就會斷開該連接,而 c3p0 連接池則以為該被斷開的連接依然有效。在這種情況下,如果客戶端代碼向 c3p0 連接池請求連接的話,連接池就會把已經失效的連接返回給客戶端,客戶端在使用該失效連接的時候即拋出異常
    2012-11-11
  • mysql binlog二進制日志詳解

    mysql binlog二進制日志詳解

    二進制日志包含了所有更新了數(shù)據(jù)或者已經潛在更新了數(shù)據(jù)(例如,沒有匹配任何行的一個DELETE)的所有語句
    2011-10-10
  • mysql update語句的執(zhí)行過程詳解

    mysql update語句的執(zhí)行過程詳解

    本文詳細介紹了,mysql中update語句的執(zhí)行過程,系統(tǒng)全面的學習下update更新語句的執(zhí)行過程,有需要的朋友可以參考下
    2020-03-03
  • mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法分析

    mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法分析

    這篇文章主要介紹了mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法,結合實例形式分析了mysql存儲過程循環(huán)語句WHILE,REPEAT和LOOP的原理、用法及相關操作注意事項,需要的朋友可以參考下
    2019-12-12

最新評論