mysql 怎麼實現隨機查詢並分頁,不重複查詢
需求:
- 企業應用中,通常數據量不是很特別多,同時大多在局域網內,性能不會有問題,通常不會分頁處理,隨機排序數據通常不會有問題
- web網站中,通常都用到分頁處理,目前數據量比較少,考慮到數據「動態」,想隨機順序展示數據(每次看到的不同)
方案:
- 數據庫解決:
- 用mysql的select * from tab order by rand()
- 用rand()會用問題,會出現數據重複:從數據庫的rand()和分頁原理上,出現重複不可避免(分頁其實對sql語句結果的分段提取,對結果集從第m條記錄到第n條記錄;mysql的rand()實現原理是每次sql的結果集的所有按算法打亂排序;而分頁是有上下文關係的,因此可能出現某條記錄出如今不一樣的分頁中,如某條記錄在第一次sql執行時,rand()排序後,在第一頁,而第二次執行sql時,rand()排序後,落在第二頁,這條記錄在分頁過程當中,用了屢次)
- 在能夠容忍重複的狀況下能夠用,不過mysql的rand()函數效率很是低,建議用表中的主鍵作散列計算排序(如主鍵是數字類型,可求餘運算來散列)
- 如不能容忍重複,數據庫好像比較難直接解決(網站web應用又沒有固定的鏈接,利用session id標識,創建臨時表?好像不大現實)
- 程序解決:
- 第一頁時,取到內存,而後翻頁時,用剩餘數據,比較複雜,也不大現實(標識session id,什麼時候清理...?)
結論:
- 好像解決不了,有無其它方案?
- 採用3分鐘以內改變一次,不過在臨界點時間,也可能出現數據重複(瀑布流方式翻頁展現時,最終回所有查出)
歡迎關注本站公眾號,獲取更多信息