`

SQL SERVER2005高效分页查询

 
阅读更多

sqlserver2005不支持关键字limit ,所以它的分页sql查询语句将不能用mysql的方式进行,幸好sqlserver2005提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页。

 

几种sqlserver2005高效分页sql查询语句
top方案:

select top 10 * from table1
   where id not in(select top 开始的位置 id from table1)

 

max:
    

select top 10 * from table1
    where id>(select max(id)
    from (select top 开始位置 id from table1order by id)tt)

 

row:

select * from (
    select row_number()over(order by tempcolumn)temprownumber,*
    from (select top 开始位置+10 tempcolumn=0,* from table1)t
)tt where temprownumber>开始位置

 
3种分页方式,分别是max方案,top方案,row方案

效率:
第1:row
第2:max
第3:top

缺点:
max:必须用户编写复杂sql,不支持非唯一列排序
top:必须用户编写复杂sql,不支持复合主键
row:不支持sqlserver2000

测试数据:
共320万条数据,每页显示10条数据,分别测试了2万页、15万页和32万页。

页码,top方案,max方案,row方案
2万,60ms,46ms,33ms
15万,453ms,343ms,310ms
32万,953ms,720ms,686ms


是一种通过程序拼接sql语句的分页方案,
用户提过的sql语句不需要编写复杂的sql逻辑

诺用户提供sql如下
select * from table1

 

从第5条开始,查询5条,处理后sql变为

 

select * from (
    select row_number()over(order by tempcolumn)temprownumber,*
    from (select top 10 tempcolumn=0,* from table1)t
)tt where temprownumber>5

 

这是什么意思呢?分解一下

首先将用户输入的sql语句转稍稍修改
在select后添加top 开始位置+条数变成
再外加一列tempcolum,变成这样

select top 20 tempcolumn=0,* from clazz


嵌套一层,这样便可查询出行号
   刚才那个列就是用来这里order by用的
(也不知道sqlserver的row_number函数为什么必须要order by)

select row_number()over(order by tempcolumn)temprownumber,*
from (修改过的查询)t

 
再套一层,过滤掉行号小于开始位置的行

select * from (第二层)tt where temprownumber>10

 

分享到:
评论

相关推荐

    SqlServer高效万能分页存储过程

    使用系统游标分页,数据越大越能显示高效

    如何实现SQL Server 2005快速Web分页

    随着SQL Server的发布,其中的一些排序函数使得开发人员编写数据分页程序变得更加简单和高效。这些新的排序函数提供了统计数据集的数目,对数据集归类,按照 某种标准对数据集排序等功能。在本文中将着重介绍新增加...

    真正高效的SQLSERVER分页查询(多种方案)

    Sqlserver数据库分页查询一直是Sqlserver的短板,分页查询每页30条,查询第1500页(即第45001-45030条数据)进行测试,分析出最高效的查询,感兴趣的朋友可以参考下哈

    Server2005高效分页存储过程(支持多字段排序)

    Server2005/2008专用高效分页存储过程(支持多字段排序).

    SQL Server 2000下的通用分页存储过程

    SQL Server 2000下的通用分页存储过程.sql

    sqlserver分页查询处理方法小结

    几种sqlserver2008高效分页sql查询语句 top方案: sql code: select top 10 * from table1 where id not in(select top 开始的位置 id from table1) max: sql code: select top 10 * from table1 whe

    SQL2005 高效分页sql语句

    SQL2005 高效分页sql语句,需要的朋友可以参考下。

    SQL ASP.NET高性能分页

    SQLServer中有一个Set Rowcount的的设置,它的意思是使命令的处理在响应指定的行数之后停止处理命令,利用这个特点,我们可以借用它来在一个千万行级数据表中实现高性能分页查询。先来说说实现方式: 1、我们来假定...

    Server2005高效分页存储过程(支持多字段排序,支持Group By)

    Server2005/2008专用高效分页存储过程(支持多字段排序,支持Group By分组).

    高效的SQLSERVER分页查询(推荐)

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条...

    浅谈SQLServer数据库分页

    在SQLServer中使用存储过程实现分页的已经有很多方法了。之前在面试中遇到过这一问题,问如何高效实现数据库分页。刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下。这里以SQLServer的示例数据库...

    浅谈SQL Server数据库分页

    在SQLServer中使用存储过程实现分页的已经有很多方法了。之前在面试中遇到过这一问题,问如何高效实现数据库分页。刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下。  一 需求  这里以SQL...

    SQL SERVER 2008 中三种分页方法与比较

    建立表: 代码如下:CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_...

    C#拼接SQL语句 用ROW_NUMBER实现的高效分页排序

    C#拼接SQL语句,SQL Server 2005+,多行多列大数据量情况下,使用ROW_NUMBER实现的高效分页排序

    java JDBC连接数据库,并将数据分页

    使用JDBC技术连接oracle数据库,并且实现简单的数据分页,能够更加高效的提取数据

    瞻远.net分页控件 v2.0 Demo.rar

    如果使用SqlServer2005请把UcfarDB.mdb附加到你的数据库中;同时在webconfig中把add name="UcfarDBSql2005" 改为add name="UcfarDB",把默认的连接Access数据库的add name="UcfarDB",改为其他名称或删除; 产品非常...

    九头鸭.net分页控件 v1.1.rar

    8、DataPage分页效率高效除了默认实例access外如果选择sqlserver存储过程分页将会更高效 DataPage的使用方法: 先将DataPage.dll复制到您项目的bin文件夹下然后在工具箱右键单击选择项,在弹出的选择工具箱项窗口...

Global site tag (gtag.js) - Google Analytics