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

首頁 > 數據庫 > MySQL > 正文

sql order by rand隨機數據優化與性能對比

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

今天要做網站文章右則隨機推薦功能,這個我們需要根據當前分類中隨機調用不同文章出來,下面我來給大家分享我在使用order by rand取隨機數據優化.

測試環境:apache2.2/php5.2/mysql5

測試數據:15W+數據,數據表大小600MB

測試語句:最初使用的是 order by rand()了,發現幾萬條數據居然要10秒之長的時間很是悲劇吧,代碼如下:

SELECT * FROM `表名`  order by rand()

顯示行 0 - 29,154,825 總計, 查詢花費 10.1125 秒,后來網上搜索到如下方法,同樣數據感覺有很大的提高了,這里測試的是15W數據,代碼如下:

SELECT * FROM 表名 WHERE id >= ((SELECT MAX(id) FROM 表名)-(SELECT MIN(id) FROM 表名)) *

RAND() + (SELECT MIN(id) FROM 表名) LIMIT 10

顯示行 0 - 29 (154,825 總計, 查詢花費 0.0221 秒),感覺不錯了,有朋友說用join可能更好,于時找了一段代碼測試一下查詢花費 0.0025 秒,又提供了幾倍呀,代碼如下:

  1. SELECT * 
  2. FROM 表名 AS t1 
  3. JOIN ( 
  4. SELECT ROUND( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM 表名 ) ) AS id 
  7. AS t2 
  8. WHERE t1.id >= t2.id 
  9. ORDER BY t1.id ASC 
  10. LIMIT 10 

顯示行 0 - 9 (10 總計, 查詢花費 0.0025 秒),最后還可以優化一下,代碼如下:

  1. SELECT s_url,title 
  2. FROM 表名 AS t1 
  3. JOIN ( 
  4. SELECT ROUND( RAND( ) * ( 
  5. SELECT MAX( id ) 
  6. FROM 表名 ) ) AS id 
  7. AS t2 
  8. WHERE t1.id >= t2.id and t1.z_type = $z_type ORDER BY t1.id asc LIMIT 10  //Vevb.com 

顯示行 0 - 9 (10 總計,查詢花費 0.0008 秒).

總結一下,我們如果用同樣的方法在字段選擇時越少越好,這不從0.0025直接降到0.0008秒了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 称多县| 阳新县| 英山县| 彰武县| 崇礼县| 交口县| 汽车| 禹城市| 鄂托克前旗| 保亭| 额济纳旗| 宿迁市| 永嘉县| 迭部县| 贵南县| 昌邑市| 阳新县| 射阳县| 介休市| 香港 | 锡林郭勒盟| 长武县| 厦门市| 天镇县| 永德县| 古浪县| 德州市| 萝北县| 汉中市| 察哈| 贺兰县| 茂名市| 澄江县| 中江县| 云安县| 阿拉善盟| 长宁县| 金乡县| 鄂温| 鄂温| 深圳市|