国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql rand()隨機取出記錄的優化

2024-07-24 12:37:45
字體:
來源:轉載
供稿:網友

在mysql中我們要查詢數據表中隨機數據最常用的就是使用Rand()函數了,但是Rand()函數在使用幾萬條記錄是很快的,如果上千萬條時可能會有問題,下面我來介紹Rand()函數的用法.

MySQL隨機查詢出一條記錄,代碼如下:

  1. $sql = “SELECT * FROM pinglun WHERE id >= ((SELECT MAX(id) FROM pinglun)-(SELECT MIN(id) FROM pinglun)) * RAND() + (SELECT MIN(id) FROM pinglun) LIMIT 1″; 

這樣寫效率比較高,千萬不要用order by rand()那種,數據量大了,order一下效率很低,下面我來介紹一下 隨機取出記錄的優化.

第一種方法:結合應用層來實現,只要SELECT MAX(id) FROM table;取出最大的id,然后用隨機生成一個1~MAX(id)數,比如PHP mt_rand(1,MAX(id)) 然后再在用這個隨機id去查詢那條記錄.

第二種方法:利用數據庫生成的隨機的id,子查詢的方式,代碼如下:

SELECT CEIL(RAND() * (SELECT MAX(id) FROM table));

這樣我們就可以獲取一個隨機的id.(對MAX()進行優化,不使用SELECT CEIL(RAND() * MAX(id)) FROM table),執行一下,大大優化了,代碼如下:

  1. SELECT * 
  2. FROM table 
  3. WHERE id >= ( 
  4. SELECT CEIL( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM table ) ) ) 
  7. LIMIT 1 

第三種方法:利用JOIN的方法,代碼如下:

  1. SELECT * 
  2. FROM `tableAS t1 
  3. JOIN ( 
  4. SELECT ROUND( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM `table` ) ) AS id 
  7. AS t2 
  8. WHERE t1.id >= t2.id 
  9. ORDER BY t1.id ASC 
  10. LIMIT 1 --Vevb.com

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柞水县| 绥化市| 察雅县| 岚皋县| 夏津县| 栾川县| 高陵县| 冕宁县| 张家港市| 玛多县| 电白县| 长白| 钟祥市| 敦煌市| 涞源县| 扎赉特旗| 阜康市| 晋州市| 望都县| 碌曲县| 渭源县| 南丰县| 广德县| 阿城市| 屏东市| 靖州| 浠水县| 沧州市| 天峨县| 济南市| 桦甸市| 辛集市| 永仁县| 阜阳市| 文化| 朝阳区| 崇义县| 砀山县| 开原市| 凌海市| 板桥市|