+ -
当前位置:首页 → 问答吧 → 高效的数据库翻页算法

高效的数据库翻页算法

时间:2010-11-12

来源:互联网

最近在做站内搜索,例如搜索帖子,需要将搜索結果分页显示。
在网上看过很多数据库分页算法,感觉原理都是一样:每次点击翻页时都传递搜索的关键字和搜索页数到后台,后台根据相应参数查询数据库,然后将結果集滚动到相应页数,最后返回数据。
这种算法实现起来很简单,但是有个问题,即每次翻页时都要重新搜索与查询数据库,这样是不是浪费了大量地重复搜索与查询时间?有没有一种办法,能够在第一次搜索时保存相应結果集,然后每次翻页时传递相应参数到后台,后台只需将結果集滚动到所請求页数,然后返回結果,这样就避免了重复查询,从而提高了效率。那这种方法能够实现么?
具体情况为:现在有一个简单的HTML页面,上面包含有一个搜索框的表单,当用户点击搜索时,用Ajax传递相应参数给servlet,servlet进行处理后将結果(一部分)以xml形式返回给搜索页面,并且翻页功能也都用Ajax+servlet实现,要求是不能重复查询。
有些人可能想到将查询結果集放到内存中或存在临时表中,这两种方法似乎不太好,那有没有更好的算法呢?

作者: yuyaangel   发布时间: 2010-11-12

可以本地缓存啊

同时可以yongjson
或者 干嘛用翻页啊

看看google的阅读器 哈哈

作者: xming4321   发布时间: 2010-11-12

既然多取出了数据,必然要缓存在某处,内存是比较好的地方,其实文件缓存也不错。
不过说实在的,关键字查询的话,估计99%的人就看第一页,所以这个多的结果集是否高效真的很有疑问。

作者: jzh2004   发布时间: 2010-11-12

那如果是存在内存中又怎么实现呢?每次請求后该結果集就会关闭了,怎么一直保留这个結果集,这样每次請求就不用再去重复搜索了。

作者: yuyaangel   发布时间: 2010-11-12

存在内存中可以用memcache,但是这种结果集应该会很大,存内存的一般要么是大家都常用到的,要么是你暂时经常用到的,如果你要关闭还在的话,存文件缓存更好点吧。

作者: jzh2004   发布时间: 2010-11-12

你说的临时文件是指cookie吗?cookie不是很安全,如果用创建临时表的方法,即先将結果集放在一个表中,用完后就把表删除了,这两种方法哪个更快?

作者: yuyaangel   发布时间: 2010-11-12

热门下载

更多