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分钟以内改变一次,不过在临界点时间,也可能出现数据重复(瀑布流方式翻页展现时,最终回所有查出)
相关文章
相关标签/搜索