亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL取出隨機(jī)數(shù)據(jù)

 更新時(shí)間:2008年04月06日 01:25:16   投稿:mdxy-dxy  
MySQL 如何從表中取出隨機(jī)數(shù)據(jù) 以前在群里討論過(guò)這個(gè)問(wèn)題,比較的有意思.mysql的語(yǔ)法真好玩.

他們?cè)瓉?lái)都想用PHP的實(shí)現(xiàn)隨機(jī),但取出多條好像要進(jìn)行兩次以上查詢(xún).

翻了手冊(cè),找到了下面這個(gè)語(yǔ)句,可以完成任務(wù)了,但效率較低

SELECT * FROM table_name ORDER BY rand() LIMIT 5;

rand在手冊(cè)里是這么說(shuō)的:
RAND() 
RAND(N) 
返回在范圍0到1.0內(nèi)的隨機(jī)浮點(diǎn)值。如果一個(gè)整數(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
你不能在一個(gè)ORDER BY子句用RAND()值使用列,因?yàn)镺RDER BY將重復(fù)計(jì)算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),這是有利于得到一個(gè)來(lái)自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的隨機(jī)樣本。注意在一個(gè)WHERE子句里的一個(gè)RAND()將在每次WHERE被執(zhí)行時(shí)重新評(píng)估。 

但我試了一下,8千條記錄的表,執(zhí)行一次需要0.08 sec,.慢了些

后來(lái)請(qǐng)教了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.*以上才支持這樣的子查詢(xún). 

下面是其它網(wǎng)友的補(bǔ)充:

select id from  zhyx_items   order by rand()  這樣效率太低了

優(yōu)化sql語(yǔ)句之后:

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;

相關(guān)文章

  • 關(guān)于mysql中時(shí)間日期類(lèi)型和字符串類(lèi)型的選擇

    關(guān)于mysql中時(shí)間日期類(lèi)型和字符串類(lèi)型的選擇

    大家好,本篇文章主要講的是關(guān)于mysql中時(shí)間日期類(lèi)型和字符串類(lèi)型的選擇,感興趣的朋友趕快來(lái)看一看吧,希望對(duì)你有幫助
    2021-11-11
  • Mysql日期格式以及內(nèi)置日期函數(shù)用法詳解

    Mysql日期格式以及內(nèi)置日期函數(shù)用法詳解

    MySQL中有多種數(shù)據(jù)類(lèi)型可以用于日期和時(shí)間的表示,這篇文章主要給大家介紹了關(guān)于Mysql日期格式以及內(nèi)置日期函數(shù)用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 新手入門(mén)Mysql--sql執(zhí)行過(guò)程

    新手入門(mén)Mysql--sql執(zhí)行過(guò)程

    MySQL 是一種關(guān)系型數(shù)據(jù)庫(kù),在Java企業(yè)級(jí)開(kāi)發(fā)中非常常用,因?yàn)?MySQL 是開(kāi)源免費(fèi)的,并且方便擴(kuò)展MySQL是開(kāi)放源代碼的,因此任何人都可以在 GPL的許可下下載并根據(jù)個(gè)性化的需要對(duì)其進(jìn)行修改
    2021-06-06
  • mysql left join快速轉(zhuǎn)inner join的過(guò)程

    mysql left join快速轉(zhuǎn)inner join的過(guò)程

    inner join內(nèi)連接,顯示兩個(gè)表中有聯(lián)系的所有數(shù)據(jù)而left join,左鏈接,以左表為參照,顯示所有數(shù)據(jù),右表中沒(méi)有則以null顯示,本文重點(diǎn)給大家講解mysql left join快速轉(zhuǎn)inner join的過(guò)程,需要的朋友參考下吧
    2021-06-06
  • MySQL觸發(fā)器實(shí)現(xiàn)兩表數(shù)據(jù)同步的代碼詳解

    MySQL觸發(fā)器實(shí)現(xiàn)兩表數(shù)據(jù)同步的代碼詳解

    在數(shù)據(jù)庫(kù)應(yīng)用中,我們經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行某些操作,并在操作完成后進(jìn)行相應(yīng)的處理,這時(shí)候,可以使用觸發(fā)器來(lái)實(shí)現(xiàn)這些功能,MySQL提供了強(qiáng)大的觸發(fā)器功能,本文將給大家詳細(xì)介紹MySQL觸發(fā)器實(shí)現(xiàn)兩表數(shù)據(jù)同步,需要的朋友可以參考下
    2023-12-12
  • 淺析MySQL的基數(shù)統(tǒng)計(jì)

    淺析MySQL的基數(shù)統(tǒng)計(jì)

    這篇文章主要介紹了MySQL的基數(shù)統(tǒng)計(jì)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫(kù)的使用,感興趣的朋友可以了解下
    2020-11-11
  • mysql日常使用中常見(jiàn)報(bào)錯(cuò)大全

    mysql日常使用中常見(jiàn)報(bào)錯(cuò)大全

    MySQL初學(xué)者新安裝好數(shù)據(jù)庫(kù)及使用過(guò)程中經(jīng)常遇到以下幾類(lèi)錯(cuò)誤,本文給大家詳細(xì)整理并給出完美解決方案,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • 數(shù)據(jù)庫(kù)Mysql性能優(yōu)化詳解

    數(shù)據(jù)庫(kù)Mysql性能優(yōu)化詳解

    這篇文章主要介紹了數(shù)據(jù)庫(kù)Mysql性能優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • mysql 索引的基礎(chǔ)操作匯總(四)

    mysql 索引的基礎(chǔ)操作匯總(四)

    這篇文章主要為大家詳細(xì)介紹了mysql 索引的基礎(chǔ)操作匯總,涵蓋了創(chuàng)建和查看索引、刪除索引等操作,感興趣的小伙伴們可以參考一下
    2016-08-08
  • MYSQL如何查看操作日志詳解

    MYSQL如何查看操作日志詳解

    任何一種數(shù)據(jù)庫(kù)中都有各種各樣的日志,下面這篇文章主要給大家介紹了關(guān)于MYSQL如何查看操作日志的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05

最新評(píng)論