`
lp54459622
  • 浏览: 11900 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

SQL Server分页最佳解决方案

阅读更多

SQL Server分页最佳解决方案:
建立表:

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_AS NULL , 
[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , 
[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY] 
GO 

 

插入数据:(2万条,用更多的数据测试会明显一些)

SET IDENTITY_INSERT TestTable ON 

declare @i int 
set @i=1 
while @i<=20000 
begin 
    insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX') 
    set @i=@i+1 
end 

SET IDENTITY_INSERT TestTable OFF 

 
-------------------------------------

分页方案一:(利用Not In和SELECT TOP分页)
语句形式:

SELECT TOP 10 * 
FROM TestTable 
WHERE (ID NOT IN 
          (SELECT TOP 20 id 
         FROM TestTable 
         ORDER BY id)) 
ORDER BY ID 


SELECT TOP 页大小 * 
FROM TestTable 
WHERE (ID NOT IN 
          (SELECT TOP 页大小*页数 id 
         FROM 表 
         ORDER BY id)) 
ORDER BY ID 

 
-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:

SELECT TOP 10 * 
FROM TestTable 
WHERE (ID > 
          (SELECT MAX(id) 
         FROM (SELECT TOP 20 id 
                 FROM TestTable 
                 ORDER BY id) AS T)) 
ORDER BY ID 


SELECT TOP 页大小 * 
FROM TestTable 
WHERE (ID > 
          (SELECT MAX(id) 
         FROM (SELECT TOP 页大小*页数 id 
                 FROM 表 
                 ORDER BY id) AS T)) 
ORDER BY ID 

 
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句

在实际情况中,要具体分析。

再看看这个呢SQL Server

从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择:

SELECT * 

  FROM ( SELECT Top N * 

  FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2 

  Order by 主键 asc 

 
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
  

SELECT * 

  FROM ( SELECT TOP 20 * 

  FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2 

  Order by sys_id asc 

 

分享到:
评论

相关推荐

    关于SQL Server SQL语句查询分页数据的解决方案

    关于SQL Server SQL语句查询分页数据的解决方案

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    VS2005+SQL SERVER 2000+AspNetPager1 分页存储,终极解决方案

    VS2005+SQL SERVER 2000+AspNetPager1 分页存储,终极解决方案

    SQL中分页解决方案

    SQL中分页解决方案 涉及主流的DB Oracle、SQL Server、Mysql

    SQL Server 2016 Reporting Service

    微软SQL Server 2016制作报表工具,提供了一组内部部署工具和服务,可用于建立、部署及管理行动与分页报表。SSRS 解决方案会以弹性方式提供正确的信息给需要的用户。 用户可以透过下列方式取用报表:网页浏览器、...

    SQL SERVER 2000开发与管理应用实例

    本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    SQLServer的性能调优:解决查询速度慢的五种方法

    DMV查找慢速查询、通过APM解决方案查询报告、SQLServer扩展事件、SQL Azure查询性能洞察等相关内容。 本文来自博客园,由火龙果软件Anna编辑、推荐。SQLServer的一个重要功能是内置于其中的所有动态管理视图(DMV)...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    1.3.5 解决方案资源管理器窗口 1.3.6 错误窗口 1.4 第一个ASENET程序 1.5 本章小结 第2章 C#程序设计基础 2.1 C#语言简介 2.2 C#中的数据类型 2.2.1 值类型 2.2.2 引用类型 2.2.3 装箱和拆箱 2.3 C#...

    sqlserver2000基础(高手也有用)

    7.2.4 使用SQL Server的系统存储过程处理分页 216 7.3 特殊要求的分页处理 217 7.3.1 随机显示的分页处理 217 7.3.2 分类数据的分页处理 221 第 8 章 树形数据处理 223 8.1 单编号处理法 223 8.1.1 ...

    Sql Service存储过程分页

    一起是用oracle数据库,感觉oracle数据库强大...不晓得博友门有木有什么解决方案  不多说了直接上代码。  GO IF (SELECT COUNT(*) FROM sysobjects s WHERE s.[type]='P' AND s.name='SP_PAGE')&gt;0 DROP PROC SP_

    .NET 通用分页控件

    AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现...

    百万级数据分页存储+AspNetPager+GridView+DetailsView实现数据增删改查(补上了临时表建立SQL语句)

    形成完整的解决方案,(就差建立数据表了,只不过520万的数据表1G多,没法填进去)。既有前辈整理的Repeater + AspNetPager + 分页存储对百万级数据查询(520万),也有小弟实现GridView + DetailsView + AspnetPager + ...

    C# NHibernate 分页 HQL 源码

    使用vs2010打开解决方案。 把网站 App_Data 中的数据库附加一下。我这里用的是sql2008 SQLEXPRESS 修改Web.config 连接数据库配置 &lt;property name="connection.connection_string"&gt;Server=PC2011022315OVP\SQL...

    C#自定义分页控件

    1、 首先将AspNetPager.dll复制于应用程序下的bin目录,打开解决方案,引入dll文件 2、 在工具栏中添加控件,这样可以支持拖拽使用 3、 要使用AspNetPager 要为其设置最基本的属性 使用 SqlServer Northwind数据库的...

    程序员的SQL金典.rar

    第9章 主流数据库的SQL语法差异解决方案  9.1 SQL语法差异分析  9.1.1 数据类型的差异  9.1.2 运算符的差异  9.1.3 函数的差异  9.1.4 常用SQL的差异  9.1.5 取元数据信息的差异  9.2 消除差异性的方案  ...

    AspNetPager7.2 分页控件及Demo源码

    AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现...

    Asp.net分页控件AspNetPager7.2

    AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现...

Global site tag (gtag.js) - Google Analytics