国产探花免费观看_亚洲丰满少妇自慰呻吟_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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 页游| 宁海县| 南宁市| 陆川县| 田东县| 南溪县| 福州市| 富平县| 永寿县| 文山县| 横山县| 白朗县| 祁东县| 高安市| 遂平县| 龙江县| 新疆| 麦盖提县| 宁城县| 普陀区| 威宁| 喜德县| 万年县| 应用必备| 兴宁市| 霸州市| 象州县| 香格里拉县| 洱源县| 西乌珠穆沁旗| 庄浪县| 敖汉旗| 运城市| 林州市| 柳州市| 霍山县| 承德市| 洛川县| 垣曲县| 赫章县| 交城县|