大家好!
 
最近遇到有時候使用 order by rand() 速度很慢的問題
有時候資料量很大 確實會造成這問題
不知道到底是不是跟MYSQL 效能有關
 
網路上找一找有找到這方式
 
-- 先 JOIN 一個隨機參數表 (其實也是有用到 RAND() 函數 )
-- id 最大值是用來讓 RAND 不要太小
-- XXXX_items 是要拿來排序的表單
JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM XXXX_items)) AS rid) AS r2
-- 使用隨機ID排序
ORDER BY r2.rid
 
用起來好像比較快
但是有時候也是忽快忽慢...
經過一些經驗
 
我覺得MYSQL搜尋速度與table的大小有深刻關係
如果一個表單有 text 很多資料的話
確實會拖慢排序...
即使我們不是使用 text 排序也會有影響
我想這應該與暫存資料表的方式有關係...
 
給大家參考囉
感恩