MySQL Order by rand() 效能爆走大法
2008-07-02 – 11:41:23在gslin大神那邊看到一則MySQL 的 ORDER BY RAND() 的替代方案可以調整效能的方法。
話不多說,直接講要做的事情 & 實測結論
隨機從mysql資料image從3XX萬筆中挑出一條
直覺的作法
select * from image$ order by rand();
花 24秒左右 (迷之聲:2007年上半年就是這樣過去的………)
經過強者大腦的處理方式
SELECT * FROM image$ AS r1
JOIN (SELECT (RAND() * (SELECT MAX(img_id) FROM image$)) AS id) AS r2
WHERE r1.img_id >= r2.id ORDER BY r1.img_id ASC LIMIT 1;
只要0.025~0.0001秒
是的,你沒有看錯,我沒有打錯。這是真是令人想拍捉桌罵髒話的結果,隨便測都進步了1000倍!!!!!!!
細節與思考方式,請參考
http://blog.gslin.org/archives/2008/07/02/1535/
http://jan.kneschke.de/projects/mysql/order-by-rand