`

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 Server分页查询概述 分页查询是指从大量数据中按需取出一部分数据的过程,通常用于网页展示或大型数据报表中,以提高加载速度和减少服务器负担。在SQL Server中,实现分页查询有多种方法,包括使用`ROW_...

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

    关于SQL Server SQL语句查询分页数据的解决方案 在日常工作中,我们经常需要处理大量数据,并从中获取特定页面的数据。特别是在Web应用开发中,为了提高用户体验,通常会将数据进行分页显示。针对这一需求,本文将...

    最简单的SQL Server数据库存储过程分页

    在SQL Server中,通过存储过程实现分页是一种常见且高效的解决方案。其核心思想是利用游标(Cursor)或临时表来获取数据总量,并根据指定的页码和每页数量来计算出需要返回的具体记录范围。这种方法的优势在于它可以...

    Sql server 分页存储过程的性能对比

    在SQL Server数据库管理中,分页查询是一种常见的需求,特别是在数据量庞大的情况下,为了提高用户体验,需要快速加载...通过对不同方法的深入理解和实践测试,数据库管理员能够找到最适合他们特定环境的分页解决方案。

    SQL Server 的通用分页显示存储过程

    不过,这一方法启发了后续更为高效的分页解决方案。 #### 表变量实现的分页存储过程 一种改进后的分页存储过程采用了SQL Server中的表变量技术,示例代码如下: ```sql CREATE procedure pagination1(@pagesize ...

    通用的SQL server分页存储过程

    标题提到的“通用的SQL server分页存储过程”提供了一种解决方案,可以避免重复编写存储过程,只需调整参数即可满足不同分页需求。 分页存储过程的核心思想是利用`OFFSET`和`FETCH NEXT`这两个SQL Server 2012及更...

    SQL Server 2000 通用分页过程

    这个通用分页存储过程提供了一种灵活且高效的分页解决方案。通过合理的参数配置和关键字选择,可以有效地优化查询性能。在实际应用中,还需要根据具体场景调整参数设置,以达到最佳效果。此外,随着数据库技术的发展...

    SQL Server 2008 BI解决方案提升Top10系列课程(1):更“高”的性能

    在本课程中,我们将深入探讨SQL Server 2008在商业智能(BI)解决方案方面的性能优化技巧。作为BI解决方案提升Top10系列的第一部分,本课程的重点是提高查询速度和整体系统性能,以实现更高效的数据库管理和数据分析...

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

    本文将深入探讨标题和描述中提到的“com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作”这一异常,以及如何在使用Hibernate、Struts进行分页时避免这一问题。我们将从异常的根本原因...

    sqlserver 支持多表联合查询分页存储过程

    通过上述分析可以看出,该存储过程通过动态SQL技术实现了对多表联合查询的支持,并结合分页需求构建了一个较为完整的解决方案。这种设计不仅提高了查询的灵活性,还保证了性能的高效性。在实际应用中,可以根据具体...

    sql server 分页存贮,联查,下级查询上级

    在SQL Server数据库管理系统中,处理大量数据时,分页存储、联查(JOIN)和下级查询上级(Hierarchical Query)是...在实际应用中,结合索引策略和性能优化,这些技术能帮助我们构建高性能、可扩展的数据库解决方案。

    SQL中分页解决方案

    ### SQL中的分页解决方案 在数据库管理中,分页是一种常用的技术手段,它能有效地处理大量数据的查询结果,提高用户体验。本篇文章将详细介绍在三种主流数据库系统:Oracle、SQL Server 和 MySQL 中如何实现分页...

    LINQ To SQL实现分页效果源码

    总结来说,LINQ to SQL的分页功能结合了强大的查询表达能力和数据库操作的便利性,为.NET开发者提供了高效的数据访问解决方案。通过理解和实践这些步骤,你可以在你的应用程序中实现高效的分页功能。

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

    这个"VS2005+SQL SERVER 2000+AspNetPager1 分页存储,终极解决方案"的资料包,显然是针对使用Visual Studio 2005(VS2005)开发的ASP.NET应用程序,结合SQL Server 2000数据库进行分页展示数据的高级指南。...

    SQL server分页

    通过本文对SQL Server分页技术的详细介绍,我们了解到从数据库层面实现分页不仅可以显著提高查询效率,还能提供更好的用户体验。掌握了这些技巧后,开发者可以更加灵活地应对各种复杂场景下的数据处理需求。

    常用sql分页解决方案

    本资源“常用sql分页解决方案”提供了三种不同的分页方法,旨在帮助开发者更高效地实现数据检索。 一、LIMIT与OFFSET方法(MySQL) 在MySQL中,最常用的分页查询方式是使用`LIMIT`和`OFFSET`关键字。`LIMIT`用于...

    mybatis spring sqlserver mysql

    在IT行业中,数据库管理和数据查询优化是至关重要的环节。MyBatis、Spring和SQL Server、MySQL这...在提供的压缩包文件“sqlserver分页”中,可能包含的是针对SQL Server分页查询的示例代码或配置,供开发者参考学习。

    Sqlserver2005数据库级别异步分页

    综上所述,数据库级别的异步分页结合了SQL Server的存储过程和JavaScript的前端处理,为大型数据集提供了一种高效、流畅的分页解决方案。通过合理的设计和优化,可以在保证用户体验的同时,降低服务器负载,提升系统...

Global site tag (gtag.js) - Google Analytics