隱私權聲明
本公司關心使用者隱私權與個人資訊,並遵守本公司的網站隱私政策,使用者若有任何問題,可以參考本公司的「網站隱私政策」,或利用電子郵件或連絡電話詢問本公司.
2013
11
01

[轉貼]MySQL亂數取值的效率比較

關鍵字:系統開發

一般在製作抽獎時,大多是直接使用MySQL Rand()+INDEX的作法,但因為當資料筆數越多,就有可能會遇到搜尋效能越來越慢的問題!
以下利用二條語法來說明一下

方法1. 利用MySQL Rand()的方式取1筆資料,所需約0.3598 秒
SELECT * FROM log ORDER BY rand( ) limit 10
當資料越來越多時,時間上就會越來越慢,所以若資料量小時,可以使用此方法,但當有機會超過10萬筆時,因為Rand是針對整個Table全部掃描一次後,才x傳亂數資料,所以當您有10萬筆時,代表著MySQL需要先掃描過10萬次以上才能得到結果,根據官方的說明「Order by Rand()」也不建議使用在大量的資料上!

方法2. 利用JOIN、Max及Rand產生亂數筆數,所需約0.0008 秒
SELECT *
FROM log AS a
JOIN (
SELECT MAX( ID ) AS ID FROM log) AS b
ON ( a.ID >= FLOOR( b.ID * RAND( ) )
) LIMIT 10
當資料量大時,建議可以使用第二種方法,這樣可以大幅的縮減搜尋時間。
你可能有興趣的作品案例
傑立資訊傑立資訊事業有限公司
Powered by AWS Cloud Computing

電話:(02)2739-9096 | 傳真:(02)2739-6637 | 客服:[email protected] | 臺北市信義區和平東路3段257號6樓map

© 2019 傑立資訊 All rights reserved.| 網站隱私政策

線上詢價