打印

从SQL端到Http端的数据传输问题,热切希望大家讨论!!

现在遇到一个头大的问题;

我用分页插件做了一个限定的Page List,现在有一个问题:
先说当前页面list1.asp,我的资料已经经过一个filter,但资料数目仍相当大,每页20笔,可以分出上千页(可想而知).这时SQL端就需要执行整个的搜索,并且将所有这么多的资料全部传到HTTP端,然后显示给Client端的是最前面的一页之20笔.当然我的分页就是让别人可以看其它页啊,当Client端再点击其它分页的链接时,通过Http端将指令传到SQL端,然后SQL端又如前一样将整个数据库搜索一个遍,又将所有的资料(20笔X上千页的数目)传到Http端,最后显示给Client端的不过又只是Offset=N的只有20笔的某一页而已.以此类推,每检视一个分页,SQL端都要进行累死人的处理工作,并且会将所以资料都传到Http端,虽然Client端并不要看完这么多的资料.一个感觉就是做了太多重复的工作,并且无疑使SQL端到Http端的频宽被大幅的占据,当然也让Client端感觉到"速度怎么这么慢!".

我想这个问题有很朋友一定思考过吧,我在网上没有找到相关的资料,由于鄙人的水平,对UD和SQL都了解不多,所以对这个问题无力得很,深切的希望大家讨论一下这个问题,解我燃眉之急!!!

不知道你用的什么数据库mysql 可以用limit限制:
LIMIT子句可以被用来限制SELECT语句返回的行数。LIMIT取1个或2个数字参数,如果给定2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。
mysql> select * from table LIMIT 5,10;  # Retrieve rows 6-15

如果给定一个参数,它指出返回行的最大数目。

mysql> select * from table LIMIT 5;     # Retrieve first 5 rows

换句话说,LIMIT n等价于LIMIT 0,n。

Nothing special.
我用的是MSSQL,用TOP可以取前面的N笔记录,但是不知道如何取中间的N1~N2笔.另外我用UD做的网页,因为里面有含记录集,而在数据库的存取过程中,打开一个数据库和建立一个Recordset对象是最花时间的.如果可以在WHERE后面加动态的条件可以取N1~N2笔资料,可能效率就会好很多吧!
between

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
ado的recordset有一个属性可以限制取出的纪录数目,但是这样你就算不出总共有多少页,不过这个可以用select count(*) where 来解决。
mssq也l可以使用top n来部分解决这个问题。

TOP

Between是针对值来的,而我要的是针对记录,显然不行.
Top只能取最前面的多少笔,但假如我要10-30笔呢?

TOP

以前讨论过,你到精华区看看。

TOP

本头像由诺婷提供^^!

高兴就好

TOP