关于数据优化

mylibin 2008-07-07 06:48:16
一个列表页显示数据 每页20条
点击列头对所有数据(不是当前页)进行降序、升序
这样的话就要把所有数据查询出来

如果把所有数据查询出来放到cache里
当数据改变了 用户是不会及时获取到


各位有什么好的解决办法 告诉下
...全文
133 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mylibin 2008-07-08
  • 打赏
  • 举报
回复
但是最后一行要显示平均值
这个平均值不是当前页的平均值
而是所有数据的
hy_lihuan 2008-07-08
  • 打赏
  • 举报
回复
lz你的要求不就是分页控件需要做的阿;
点击排序的字段重新绑定你要的数据就可以了阿
mylibin 2008-07-08
  • 打赏
  • 举报
回复
其实你们说的我知道 也这么写的

但是要在footer下显示所有数据的平均值这个怎么办
还是要查所有的数据才能得出来 这样数据也太多了吧
xlong224 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 brz97 的回复:]
分页查询不缓存所有数据,只是缓存一页数据

估计楼主的分页还是DataSet保存所有数据,然后分别提取显示吧

采用存储过程的方式分页读取数据,每次只根据条件查出前20条,这才是真正的分页

而且也不会出现楼主所说的问题
[/Quote]

我喜欢用这种方法
loveniki 2008-07-08
  • 打赏
  • 举报
回复
学习
namhyuk 2008-07-08
  • 打赏
  • 举报
回复
// columnList是指表的列名列表,tableName:表名
create proc proc_name
(
@startRowIndex int,
@maximumRows int,
@sortExpression nvarchar(100)
)
as
if len(@sortExpression)=0
set @sortExpression = 'someColumnName'

declare @sql nvarchar(4000)

set @sql= 'select columnList from (select columnList, ROW_NUMBER OVER(ORDER BY ' + CONVERT(nvarchar(10), @sortExpression) + ') as rank from tableName) as tempTableName where rank >' + CONVERT(nvarchar(10),@startRowIndex) + ' and rank <=' + CONVERT(nvarchar(10),@startRowIndex) + '+' + CONVERT(nvarchar(10), @maximumRows)

EXEC sp_executesql @sql

项目添加一个DataSet,新建TableAdapter,使用现有存储过程,然后选择上面这个存储过程。
再给TableAdapter增加一个返回select count(*) from tableName的查询,起个名,比如叫GetCnt。


GridView通过ObjectDataSource绑定到这个DataSet的TableAdapter, 把aspx里的ObjectDataSource的<SelectParameters>段全部删掉。
ObjectDataSource的EnablePaing:True,SelectCountMethod设为GetCnt,SortExpressionName:sortExpressioin.


基本上这样的话完成了所谓的Custom Paging and Sorting。
sunshine_anycall 2008-07-07
  • 打赏
  • 举报
回复
学习一个
brz97 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mylibin 的回复:]
分页写了
但是要求是点击列表头时不对当前页的数据排序
要对所有数据排序
对当前页排序没什么用 一眼就看出来了
[/Quote]

那就是楼主的分页过程有问题了

分页不是先top 20 再排序的
而是先排序再top 20(假设楼主是top分页)

其他分页存储过程也是这样

总之,就是先排序再抽取指定页面数据
mylibin 2008-07-07
  • 打赏
  • 举报
回复
而且有的地方 footer里要显示平均值
也是求所有数据的平均值
mylibin 2008-07-07
  • 打赏
  • 举报
回复
分页写了
但是要求是点击列表头时不对当前页的数据排序
要对所有数据排序
对当前页排序没什么用 一眼就看出来了
一品梅 2008-07-07
  • 打赏
  • 举报
回复
最好还是用存储过程写好分页.
一品梅 2008-07-07
  • 打赏
  • 举报
回复
如果把所有数据查询出来放到cache里
当数据改变了 用户是不会及时获取到
----
叉入CACHE时,加个参数CacheDependency
gui0605 2008-07-07
  • 打赏
  • 举报
回复
补充一点,设置cache的过期时间少一点即可
qiuming0306 2008-07-07
  • 打赏
  • 举报
回复
楼上的两位都给了标准答案了!
brz97 2008-07-07
  • 打赏
  • 举报
回复
分页查询不缓存所有数据,只是缓存一页数据

估计楼主的分页还是DataSet保存所有数据,然后分别提取显示吧

采用存储过程的方式分页读取数据,每次只根据条件查出前20条,这才是真正的分页

而且也不会出现楼主所说的问题
lovefootball 2008-07-07
  • 打赏
  • 举报
回复
每次只是获取一页的数据
点击排序重新按照排序查询
还是返回一页的数据

61,826

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧