從數據庫中(mysql)隨機獲取幾條數據很簡單,可是若是一個表的數據基數很大,好比一千萬,從一千萬中隨機產生10條數據,那就至關慢了,若是同時一百我的訪問網站,處理這些個進程,對於通常的服務器來講,確定是要死機的。 mysql
mysql數據庫獲取隨機數據的函數rand(),我建議輕易不要用這個,我寫博客的時候試了一下,從16萬數據裏隨機獲取5條數據,用時14.02秒,這個耗費滿驚人的。 sql
SELECT * FROM t_share ORDER BY rand() LIMIT 5;
由於mysql數據的最大值和最小值的獲取幾乎是0消耗的,數據庫表數據與自身主鍵ID的集合作join查詢,是很是快速的。剛我也試了一下,在16萬數據的基數下,隨機產生5條數據幾乎看不到時間消耗的。可是這種查詢方法有一個缺點,產生的數據ID都是連續的,若是想不連續,還要作循環執行才行(每循環一次隨機1條或2條數據)。 數據庫
SELECT sh1.* FROM fw_share AS sh1 JOIN (SELECT ROUND( RAND() * ((SELECT MAX(share_id) FROM fw_share)-(SELECT MIN(share_id) FROM fw_share)) + (SELECT MIN(share_id) FROM fw_share) ) AS share_id ) AS sh2 WHERE sh1.share_id>=sh2.share_id
其實隨機產生數據,徹底能夠讓他有根據的隨機產生。這怎麼講?好比一篇文章,它有標題、標籤、內容,能夠提取權重很高的關鍵詞,沒篇文章都這麼處理,用搜索引擎倒排序的方法,能夠快速找到相同關鍵詞的一類文章,而後在這些文章裏,隨機產生幾條數據就是了。把大海撈針的活,變成了在浴池裏撈個雜物,從大的範圍,縮小到能掌控的範圍,萬事就變得簡單啦!這也是一種思路,找不到很好的解決辦法時,能夠試試。 服務器
本文由PHP樂知博客提供 http://tech.42xiu.com 函數