台灣最大程式設計社群網站
線上人數
839
 
會員總數:246713
討論主題:190131
歡迎您免費加入會員
討論區列表 >> MySQL >> SQL 使用RAND() 造成資料庫當機
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL 使用RAND() 造成資料庫當機
價值 : 5 QP  點閱數:1149 回應數:5
樓主

町風
初學者
229 213
1974 203
發送站內信

rand() 是不是使用上有限制,造成資料庫當機了

from log:
# query_time: 21.929638 lock_time: 1.489153 rows_sent: 4 rows_examined: 11882
set timestamp=1435803786;
select *
from data
where `isopen` = '1'
order by rand() desc
limit 5;

搜尋相關Tags的文章: [ RAND() ] ,
本篇文章發表於2015-07-13 18:16
1樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
rand()本身就是取亂數,再做反序排列一點意義也沒有吧

從你的記錄來看,sql執行了將近22秒確實有點誇張
符合條件的回傳只有四筆
總紀錄也不過一萬出頭
從你貼的sql上我還真沒看出有什麼問題

本篇文章回覆於2015-07-14 09:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

町風
檢舉此回應
那如果是同時很多人使用呢? 大量rand()呢?有關係嗎?
order by rand(), 這個指令會把整個資料拿出來做排序 所以同時多人就當了??

本篇文章回覆於2015-07-14 14:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
我抱持懷疑,畢竟從紀錄上來看
你的sql只找到四筆符合的資料,就算rand()排序再怎麼花時間,也不至於用到將近22秒
問題應該在其他地方
本篇文章回覆於2015-07-15 09:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
先確認一下
你的表單有加主鍵吧
本篇文章回覆於2015-07-15 09:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
基本上使用了 rand就是全表讀取了。
如果表記錄大一點就會這樣。

我會建議你用子查訊的方式來處理。並確定你的isopen有加上索引。



以上的方式參考看看。如果要從很大的資料內,抓取的小部份資料。
最好是先將資料條件取完後。再去做一些可能會造成全表搜尋、建立的命令。
這個方法對group的方式也很有用。

但如果是從很大的資料再抓很大的資料就不適合用這招了。(反正抓的東西都很大,就直接撈吧)
本篇文章回覆於2015-07-24 14:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.