亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL查詢隨機數據的4種方法和性能對比

2024-07-24 13:05:40
字體:
來源:轉載
供稿:網友
下面從以下四種方案分析各自的優缺點。
方案一:

復制代碼 代碼如下:

SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;


這種方法的問題就是非常慢。原因是因為MySQL會創建一張零時表來保存所有的結果集,然后給每個結果一個隨機索引,然后再排序并返回。
有幾個方法可以讓它快起來。
基本思想就是先獲取一個隨機數,然后使用這個隨機數來獲取指定的行。
由于所有的行都有一個唯一的id,我們將只取最小和最大id之間的隨機數,然后獲取id為這個數行。為了讓這個方法當id不連續時也能有效,我們在最終的查詢里使用”>=”代替”=”。
為了獲取整張表的最小和最大id,我們使用MAX()和MIN()兩個聚合函數。這兩個方法會返回指定組里的最大和最小值。在這里這個組就是我們表里的所有id字段值。
方案二:

復制代碼 代碼如下:

<?php
$range_result = mysql_query( " SELECT MAX(`id`) AS max_id , MIN(`id`) AS min_id FROM `table` ");
$range_row = mysql_fetch_object( $range_result );
$random = mt_rand( $range_row->min_id , $range_row->max_id );
$result = mysql_query( " SELECT * FROM `table` WHERE `id` >= $random LIMIT 0,1 ");


就像我們剛才提到的,這個方法會用唯一的id值限制表的每一行。那么,如果不是這樣情況怎么辦?
下面這個方案是使用了MySQL的LIMIT子句。LIMIT接收兩個參數值。第一個參數指定了返回結果第一行的偏移量,第二個參數指定了返回結果的最大行數。偏移量指定第一行是0而不是1。
為了計算第一行的偏移量,我們使用MySQL的RAND()方法從0到1之間生成一個隨機數。然后我們把這個數字跟我們用COUNT()方法獲取倒的表記錄數相乘。由于LIMIT的參數必須是int型而不能是float,我們使用FLOOR()來處理結果。FLOOR()會計算小于表達式的最大值。最終的代碼就是這樣:
方案三:

復制代碼 代碼如下:

<?php
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` ");
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$result = mysql_query( " SELECT * FROM `table` LIMIT $offset, 1 " );


在MySQL 4.1以后我們可以使用子子查詢合并上面兩個方法:
方案四:

復制代碼 代碼如下:

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


這個方案跟方案二有同樣的弱點,只對有唯一id值的表有效。
記住我們最初尋找選擇隨機行的替代方法的原因,速度!所以,這些方案的在執行時間上的比較會怎么樣?我不會指出硬件和軟件配置或者給出具體的數字。大概的結果是這樣的:
最慢的是解決方案一(我們假定它用了100%的時間)。
方案二用了79%
方案三 – 13%
方案四 – 16%
so, 方案三勝出!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本在线观看天堂男亚洲| 国产精品一区二区久久精品| 国产精品毛片a∨一区二区三区|国| 91麻豆桃色免费看| 国产97色在线| 深夜福利一区二区| 日韩视频中文字幕| 日韩精品视频免费| 亚洲成人激情在线| 日韩精品在线观看视频| 中文字幕一区二区三区电影| 亚洲影视九九影院在线观看| 国产精品www网站| 日韩的一区二区| 97在线观看免费高清| 色综合久久88色综合天天看泰| 国产精品极品尤物在线观看| 成人乱色短篇合集| 国产精品揄拍500视频| 国产啪精品视频| 北条麻妃在线一区二区| 久久躁日日躁aaaaxxxx| 午夜精品一区二区三区在线视| 亚洲美女喷白浆| 欧美日韩国产精品一区二区三区四区| 欧美国产日韩一区二区三区| 亚洲香蕉伊综合在人在线视看| 亚洲精品99久久久久中文字幕| 亚洲精品在线看| 国语自产精品视频在线看一大j8| 国产精品免费久久久| 亚洲精品色婷婷福利天堂| 亚洲激情国产精品| 韩国福利视频一区| 日韩在线高清视频| 亚洲欧洲日产国码av系列天堂| 亚洲美女av在线| 亚洲一区二区三区在线视频| 精品人伦一区二区三区蜜桃网站| 欧美亚洲国产视频小说| 92裸体在线视频网站| 在线观看91久久久久久| 欧美性生交大片免网| 亚洲第一网站男人都懂| www日韩中文字幕在线看| 日韩国产精品亚洲а∨天堂免| 亚洲欧洲第一视频| 亚洲一区二区三区毛片| 亚洲精品自在久久| 亚洲女人天堂色在线7777| 久久久亚洲福利精品午夜| 亚洲精品综合精品自拍| 国产精品 欧美在线| 国产热re99久久6国产精品| 成人观看高清在线观看免费| 精品人伦一区二区三区蜜桃免费| 久久久久久久久久久av| 怡红院精品视频| 亚洲色图第一页| 欧美xxxx18国产| 成人夜晚看av| 国产99视频精品免视看7| 91sao在线观看国产| www.久久久久久.com| 97国产精品视频人人做人人爱| 日韩在线免费高清视频| 欧美日本在线视频中文字字幕| 日韩美女在线观看一区| 国产精品福利久久久| 欧美激情videoshd| 久久精品国产欧美激情| 麻豆国产va免费精品高清在线| 国产精品久久久久高潮| 在线观看日韩专区| 国产一区二区日韩精品欧美精品| 久久99久久99精品免观看粉嫩| 亚洲成色777777在线观看影院| 日韩一区二区av| 日韩在线免费av| 亚洲乱码av中文一区二区| 欧美日韩视频在线| 欧美成人免费小视频| 欧美日韩在线免费观看| 亚洲成人免费在线视频| 久久久久久久国产精品视频| 国产精品免费久久久久久| 日韩av资源在线播放| 亚洲免费小视频| 日本一区二区三区在线播放| 欧美日韩国产第一页| 精品视频偷偷看在线观看| 国产91在线播放| 亚洲一级黄色片| 久久伊人免费视频| 成人网在线观看| 成人午夜一级二级三级| 成人欧美一区二区三区黑人孕妇| 欧美日韩在线视频一区| 久久久久久久999| 精品美女永久免费视频| 精品欧美一区二区三区| 欧美在线一级va免费观看| 欧美日韩一区二区免费视频| 久久综合88中文色鬼| 亚洲激情电影中文字幕| 亚洲人成电影网| 奇门遁甲1982国语版免费观看高清| 久久夜精品va视频免费观看| 日韩精品中文字幕在线观看| 日韩精品中文字| 久久精品国产精品亚洲| 欧美激情中文字幕在线| 亚洲欧洲一区二区三区久久| 日韩精品免费一线在线观看| 中文字幕欧美国内| 国内精品在线一区| 亚洲人成在线观看| 日韩欧美精品在线观看| 美日韩丰满少妇在线观看| 亚洲日韩欧美视频一区| 国产在线拍揄自揄视频不卡99| 伊人久久免费视频| 亚洲人午夜色婷婷| 亚洲欧美制服另类日韩| 欧美一区二区影院| 国产日韩欧美在线| www亚洲欧美| 国产在线精品成人一区二区三区| 欧美精品精品精品精品免费| 亚洲 日韩 国产第一| 欧美激情亚洲激情| 亚洲精品狠狠操| 亚洲最新av在线| 久久精品视频一| 国产精品国产三级国产aⅴ浪潮| 亚洲人成亚洲人成在线观看| 蜜月aⅴ免费一区二区三区| 国产精品女主播| 92版电视剧仙鹤神针在线观看| 欧美黑人性生活视频| 国产精品va在线播放我和闺蜜| 91国内揄拍国内精品对白| 久久久精品欧美| 亚洲3p在线观看| 精品欧美国产一区二区三区| 69久久夜色精品国产7777| 久久综合色88| 亚洲美女精品成人在线视频| 国产精品99久久久久久白浆小说| 国产欧美 在线欧美| 亚洲人成伊人成综合网久久久| 亚洲精品中文字幕av| 国产精品久久99久久| 日韩免费在线观看视频| 精品视频—区二区三区免费| 91丨九色丨国产在线| 欧美大人香蕉在线| 亚洲一区二区久久| 97热精品视频官网| 精品久久中文字幕久久av| 成人观看高清在线观看免费| 欧美成人午夜视频| 欧美另类老肥妇| 欧美激情精品久久久久久蜜臀|