菜头粿

标题: SQL查询的分页思路 [打印本页]

作者: mrbear    时间: 2009-8-29 12:15
标题: SQL查询的分页思路





SQL查询的分页思路[转帖]
如果用一般的SELECT*查询SQL数据库,然后用recordset进行分页的话,在返回结果很多的情况下将会是一个漫长的过程,而且很消耗内存.你可能会有感觉,用access也比SQL快.
其实我们可以只取出我们每页需要显示的记录数,这样的速度是惊人的,非常快.这里我们会用到聚集索引来快速确定我们需要取出的记录数的位置.如下面:
ifp>1then'p为PAGE页数
ifn="next"then'下一页
sql="selecttop26*fromsong1whereid>"&pk&"andcontains(songtitle,'"&songname&"')"'PK为当前页的最大ID数
elseifn="prev"then'上一页
sql="selecttop26*fromsong1whereid<"&previd&"andcontains(songtitle,'"&songname&"')orderbyiddesc"'previd最小ID
endif
else
sql="selecttop26*fromsong1wherecontains(songtitle,'"&songname&"')"'没有指定PAGE值,默认第一页
endif
这里用到了全文检索,速度也是很快的,我在52万记录下测试,最快可以46MS(机器C1.7.DDR256M),感觉比较可以,我用like代码模糊查询页测试过,在结果集很多的情况下比全文更快,但是如果结果很少(整个表只有那么几条)将是漫长的过程,因为要对全表进行扫描!

按上面的方法不能得出所查询结果得总记录数,这里我们可以用selectcount(*)来获取记录总数,速度页还过得去,不过感觉要慢一截,特别是记录集很多得情况,不过这样占用得内存很小得.
以上是我最近搞SQL查询得心得.

作者:cao5来源:不详







欢迎光临 菜头粿 (https://cn.521000.cn/) Powered by Discuz! X3