SqlSever大数据分页

在sql sever中大数据的分页一直是难以处理的一块,利用id自增列分页也存在不足之处。从一个相对全面的分页看,sql sever2005中新增的row_number()函数解决了这个问题。还是从一个实际项目开始介绍吧。中国铁建股份公司的项目表中数据很大,开发之初用的是GridView控件自带的分页,在运行一年以后,点击下一页终于是难以等待了,系统需要优化。对于分页的改进是业务的需要。于是,我采用了Row_number()函数分页。也算一解了燃眉之急。

说明:该篇文章只是一个案例的说明,更详细的理论请查看随笔《大数据分页实现与性能优化》

提高分页效率主要有:
(1)充分利用外键,以提高表连接速度
(2)尽可能使用自然链接,尽量避免使用外连接
(3)尽可能将记录少的表放在连接的左边,以减少先处理的记录数
(4)尽可能先选择,后连接,以减少处理的数据量
(5)有可能的时候建立视图,充分使用数据库自身的优化功能

以下为分页查询的sql语句:

select * from
(select t_gcxm_test.sgdw,t_gcxm_test.id,xmmc,t_gcxm_test.gclb as gclb,gchte,gchte - kl2 as xmsyjzl,
kl2 as klsl,dwmc,lry ,Row_number() over(order by t_gcxm_test.id desc) as IDRank
from t_dw,t_gcxm_test where t_dw.dwid=t_gcxm_test.sgdw  and (sgdw like‘gf12%‘ and ((sgdw <>‘gf12‘ and fgcid is  null)or(sgdw =‘gf12‘ )) or  lry =  ‘gf12gao‘))
as b
where IDRank>=50023 and IDRank<50033

其中的IDRank的值可通过web网页,传递过来。把分页的sql语句写在存储过程中,可以充分展现分页的效果。

图一 单表分页耗时

图二 多表分页耗时

时间: 2024-10-31 00:09:17

SqlSever大数据分页的相关文章

SqlSever大数据分页【转】

2014-09-26 08:53:42 [文章出处:http://www.cnblogs.com/wlandwl/archive/2014/09/25/bigpage.html] 在sql sever中大数据的分页一直是难以处理的一块,利用id自增列分页也存在不足之处.从一个相对全面的分页看,sql sever2005中新增的row_number()函数解决了这个问题.还是从一个实际项目开始介绍吧.中国铁建股份公司的项目表中数据很大,开发之初用的是GridView控件自带的分页,在运行一年以后,

大数据分页实现与性能优化

摘要:Web 应用程序中经常使用数据分页技术,该技术是提高海量数据访问性能的主要手段.实现web数据分页有多种方案,本文通过实际项目的测试,对多种数据分页方案深入分析和比较,找到了一种更优的数据分页方案Row_number()二分法.它依靠二分思想,将整个待查询记录分为2部分,使扫描的记录量减少一半,进而还通过对数据表及查询条件进行优化,实现了存储过程的优化.根据Row_number()函数的特性,该方案不依赖于主键或者数字字段,大大提高了它在实际项目中的应用,使大数据的分页效率得到了更显著的提

大数据分页解决方案

1 编写目的 解决系统需要检索大数据列表时的性能问题,而提出的分页方案 2 术语.定义和缩略语 3 大数据量检索的性能问题分析 大数据量检索的性能存在问题,问题主要包括 3.1 客户端在IE或者cs端数据量过大会导致IE变慢,甚至死锁 现象: IE浏览器崩溃 浏览器白板,停止响应 3.2 客户端--web服务器之间的数据传输量大会导致客户端速度变慢,效率降低 现象: IE浏览器长期在等待时白板 IE 浏览器操作慢 3.3 中间层构造大数据列表会导致中间层性能降低 现象: 并发访问多时,应用服务器

SQL SERVER大数据分页

select * from (select rownum r, a.* from (select * from  table_name order by ndatetime desc ) a where rownum <= currentPage * pageSize ) where r > (currentPage - 1) * pageSizeSQL SERVER大数据分页,布布扣,bubuko.com

最好用的兼容多种数据库通用高效的大数据分页功能

通用权限管理系统底层有一个通用分页查询功能,该功能可实现多种数据库的查询,支持多表关联分页查询,目前是最完善的分页功能实现. 下面代码是使用的方法截图: /////////////////////////////// 后台代码截图1 /////////////////////////////// 后台代码截图2 /////////////////////////////// 后台代码截图3 /////////////////////////////// 后台代码截图4 /////////////

ASP.NET + SqlSever 大数据解决方案 PK HADOOP

半个月前看到博客园有人说.NET不行那篇文章,我只想说你们有时间去抱怨不如多写些实在的东西.  1.SQLSERVER优点和缺点? 优点:支持索引.事务.安全性以及容错性高 缺点:数据量达到100万以上就需要开始优化了,一般我们会对 表进行水平拆分,分表.分区和作业同步等,这样做大大提高了逻辑的复杂性,难以维护,只有群集容错,没有多库负载均衡并行计算功能.  2.SQLSERVER真的不能处理大数据? 答案:当然可以的,打个比方:操作单一数据库称为一维操作,如果操作相同结构,分布在多个服务器上的

mysql 大数据分页优化

一.mysql大数据量使用limit分页,随着页码的增大,查询效率越低下. 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下: select * from product limit 10, 20   0.016秒select * from prod

关于mysql大数据分页的一些方法。

select * from user  limit 0,10;   这种最普通的方法在数据量不大的时候是没问题的 当数据量大于100W的时候 ,就要 select * from user limit 1000000,10 ;  此时数据库 要先扫过前面的100W条记录,再来取10条,所以当数据量越来越大的时候,速度也会越来越慢. 解决方案: 1.从业务上解决,限制最多只能取前70页或者前三十页的数据.例如 百度 .谷歌搜索.. 2.使用 select * from user where id >

mysql 大数据分页查询优化

应用场景: 当有一张表的数据非常大,需要使用到分页查询,分页查询在100w条后查询效率非常低: 解决方案: 1.业务层解决:只允许用户翻页一百页以内,十条一页: 2.使用where id > 5000000 limit 10; 要求数据完整性:但可以考虑每次查询时得知已查的最后一条id. 3.延迟查询:select table.id,table.name left join (select id from table limit 5000000,10) as tmp on table.id =