mysql 怎麼實現隨機查詢並分頁,不重複查詢

需求:


  1. 企業應用中,通常數據量不是很特別多,同時大多在局域網內,性能不會有問題,通常不會分頁處理,隨機排序數據通常不會有問題
  2. web網站中,通常都用到分頁處理,目前數據量比較少,考慮到數據「動態」,想隨機順序展示數據(每次看到的不同)

方案:


  1. 數據庫解決:
  • 用mysql的select * from tab order by rand()
  • 用rand()會用問題,會出現數據重複:從數據庫的rand()和分頁原理上,出現重複不可避免(分頁其實對sql語句結果的分段提取,對結果集從第m條記錄到第n條記錄;mysql的rand()實現原理是每次sql的結果集的所有按算法打亂排序;而分頁是有上下文關係的,因此可能出現某條記錄出如今不一樣的分頁中,如某條記錄在第一次sql執行時,rand()排序後,在第一頁,而第二次執行sql時,rand()排序後,落在第二頁,這條記錄在分頁過程當中,用了屢次)
  • 在能夠容忍重複的狀況下能夠用,不過mysql的rand()函數效率很是低,建議用表中的主鍵作散列計算排序(如主鍵是數字類型,可求餘運算來散列)
  • 如不能容忍重複,數據庫好像比較難直接解決(網站web應用又沒有固定的鏈接,利用session id標識,創建臨時表?好像不大現實)
  1. 程序解決:
  • 第一頁時,取到內存,而後翻頁時,用剩餘數據,比較複雜,也不大現實(標識session id,什麼時候清理...?)

結論:

  1. 好像解決不了,有無其它方案?
  2.  採用3分鐘以內改變一次,不過在臨界點時間,也可能出現數據重複(瀑布流方式翻頁展現時,最終回所有查出)
相關文章
相關標籤/搜索