![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 町風 ![]()
![]() |
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樓 |
rand()本身就是取亂數,再做反序排列一點意義也沒有吧
從你的記錄來看,sql執行了將近22秒確實有點誇張 符合條件的回傳只有四筆 總紀錄也不過一萬出頭 從你貼的sql上我還真沒看出有什麼問題
本篇文章回覆於2015-07-14 09:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
町風 ![]() |
那如果是同時很多人使用呢? 大量rand()呢?有關係嗎?
order by rand(), 這個指令會把整個資料拿出來做排序 所以同時多人就當了??
本篇文章回覆於2015-07-14 14:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
我抱持懷疑,畢竟從紀錄上來看
你的sql只找到四筆符合的資料,就算rand()排序再怎麼花時間,也不至於用到將近22秒 問題應該在其他地方
本篇文章回覆於2015-07-15 09:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
先確認一下
你的表單有加主鍵吧
本篇文章回覆於2015-07-15 09:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓 |
基本上使用了 rand就是全表讀取了。
如果表記錄大一點就會這樣。 我會建議你用子查訊的方式來處理。並確定你的isopen有加上索引。 以上的方式參考看看。如果要從很大的資料內,抓取的小部份資料。 最好是先將資料條件取完後。再去做一些可能會造成全表搜尋、建立的命令。 這個方法對group的方式也很有用。 但如果是從很大的資料再抓很大的資料就不適合用這招了。(反正抓的東西都很大,就直接撈吧)
本篇文章回覆於2015-07-24 14:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |