高效的数据库翻页算法
时间:2010-11-12
来源:互联网
最近在做站内搜索,例如搜索帖子,需要将搜索結果分页显示。
在网上看过很多数据库分页算法,感觉原理都是一样:每次点击翻页时都传递搜索的关键字和搜索页数到后台,后台根据相应参数查询数据库,然后将結果集滚动到相应页数,最后返回数据。
这种算法实现起来很简单,但是有个问题,即每次翻页时都要重新搜索与查询数据库,这样是不是浪费了大量地重复搜索与查询时间?有没有一种办法,能够在第一次搜索时保存相应結果集,然后每次翻页时传递相应参数到后台,后台只需将結果集滚动到所請求页数,然后返回結果,这样就避免了重复查询,从而提高了效率。那这种方法能够实现么?
具体情况为:现在有一个简单的HTML页面,上面包含有一个搜索框的表单,当用户点击搜索时,用Ajax传递相应参数给servlet,servlet进行处理后将結果(一部分)以xml形式返回给搜索页面,并且翻页功能也都用Ajax+servlet实现,要求是不能重复查询。
有些人可能想到将查询結果集放到内存中或存在临时表中,这两种方法似乎不太好,那有没有更好的算法呢?
在网上看过很多数据库分页算法,感觉原理都是一样:每次点击翻页时都传递搜索的关键字和搜索页数到后台,后台根据相应参数查询数据库,然后将結果集滚动到相应页数,最后返回数据。
这种算法实现起来很简单,但是有个问题,即每次翻页时都要重新搜索与查询数据库,这样是不是浪费了大量地重复搜索与查询时间?有没有一种办法,能够在第一次搜索时保存相应結果集,然后每次翻页时传递相应参数到后台,后台只需将結果集滚动到所請求页数,然后返回結果,这样就避免了重复查询,从而提高了效率。那这种方法能够实现么?
具体情况为:现在有一个简单的HTML页面,上面包含有一个搜索框的表单,当用户点击搜索时,用Ajax传递相应参数给servlet,servlet进行处理后将結果(一部分)以xml形式返回给搜索页面,并且翻页功能也都用Ajax+servlet实现,要求是不能重复查询。
有些人可能想到将查询結果集放到内存中或存在临时表中,这两种方法似乎不太好,那有没有更好的算法呢?
作者: yuyaangel 发布时间: 2010-11-12
可以本地缓存啊
同时可以yongjson
或者 干嘛用翻页啊
看看google的阅读器 哈哈
同时可以yongjson
或者 干嘛用翻页啊
看看google的阅读器 哈哈
作者: xming4321 发布时间: 2010-11-12
既然多取出了数据,必然要缓存在某处,内存是比较好的地方,其实文件缓存也不错。
不过说实在的,关键字查询的话,估计99%的人就看第一页,所以这个多的结果集是否高效真的很有疑问。
不过说实在的,关键字查询的话,估计99%的人就看第一页,所以这个多的结果集是否高效真的很有疑问。
作者: jzh2004 发布时间: 2010-11-12
那如果是存在内存中又怎么实现呢?每次請求后该結果集就会关闭了,怎么一直保留这个結果集,这样每次請求就不用再去重复搜索了。
作者: yuyaangel 发布时间: 2010-11-12
存在内存中可以用memcache,但是这种结果集应该会很大,存内存的一般要么是大家都常用到的,要么是你暂时经常用到的,如果你要关闭还在的话,存文件缓存更好点吧。
作者: jzh2004 发布时间: 2010-11-12
你说的临时文件是指cookie吗?cookie不是很安全,如果用创建临时表的方法,即先将結果集放在一个表中,用完后就把表删除了,这两种方法哪个更快?
作者: yuyaangel 发布时间: 2010-11-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28