`
flashdream8
  • 浏览: 678820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sqlserver 分页实现的几种方案

阅读更多

建立表:

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的游标存储过程分页)
create  procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
 @rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
 
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。
 
通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用
在实际情况中,要具体分析。
此转载源自李洪根的blog.作者是微软的MVP!希望大家参考以下3种方案,按实际情况选择!
SELECT TOP 页大小 *
FROM
 Users
WHERE
 (ID NOT IN (SELECT TOP (页大小*(页数-1)) ID FROM Users ORDER BY ID DESC))
ORDER BY
 ID DESC
分享到:
评论

相关推荐

    sql server分页技术(SQL Server 与Access数据库相关分页技术)

    以下是几种常用的SQL Server分页技术: 1. **TOP 和 NOT IN** 分页: 这种方法通过`TOP`关键字选取指定数量的记录,然后使用`NOT IN`子句排除已选取的记录。例如,查询第二页的记录,可以先选取前`@RecordStart`个...

    SSH框架+SQLServer实现分页的小项目

    这个"SSH框架+SQLServer实现分页的小项目"提供了一个基础的分页实现示例,适合初学者了解SSH框架如何与数据库交互,以及如何在Java Web应用中实现分页功能。通过研究这个项目,开发者可以学习到SSH框架的整合、...

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

    本篇资料主要探讨的是在SQL Server中,利用存储过程实现分页查询时的性能对比,旨在帮助数据库管理员选择最优的解决方案。 分页通常有多种实现方式,包括ROW_NUMBER()函数、游标、变量以及一些自定义的存储过程。...

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

    以上介绍了几种在不同数据库系统中实现分页查询的方法。虽然每种数据库的实现细节略有不同,但核心思想都是通过限制查询的结果集大小来实现分页功能。根据实际应用场景和数据库类型选择合适的分页查询方法是非常重要...

    在SQL Server中通过SQL语句实现分页查询

    ### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...

    SQL Server 分页方案比拼

    本文将深入探讨SQL Server中几种常见的分页方案,并对它们进行比较分析。 ### 1. 基于子查询的分页方法 一种常用的分页策略是通过子查询来实现。具体做法是在外层查询中使用`TOP`关键字选取一定数量的记录,而在内...

    swt sqlserver分页组件

    在SWT中实现SQLServer分页组件,我们需要考虑以下几个关键知识点: 1. ** SWT 表格(Table)控件**:这是SWT中用于显示行数据的基础控件。我们可以使用`TableViewer`类来操作表格,添加列、填充数据以及设置各种...

    Hibernate+sqlserver2000分页

    综上所述,`Hibernate+sqlserver2000分页`是一个结合了ORM框架和数据库分页策略的技术主题。在实际应用中,开发者需要根据业务需求选择合适的分页方法,并注意性能优化,如避免全表扫描,使用索引来加速查询等。理解...

    海量数据分页sql server经典

    本文将介绍几种在SQL Server中实现分页的有效方法,并着重讨论一种基于SQL查询优化的分页技术。 #### 传统分页方法及其局限性 - **ADO 记录集分页法**:这种方法利用ADO的内置功能实现分页。但是它存在明显的缺点...

    jsp分页技术 jsp servlet sqlserver

    - 使用了`com.microsoft.jdbc.sqlserver.SQLServerDriver`驱动连接SQL Server数据库。 - 定义了一个名为`Student`的表,包含`id`、`name`、`age`和`sex`字段。 - 插入了一些测试数据到`Student`表中。 - 定义了一个`...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    ### SQL Server分页方法 SQL Server中的分页实现方式相对复杂,主要通过子查询结合`TOP`关键字来完成。 #### 2. 使用`TOP`与子查询 这种方法利用了`TOP`关键字来限制结果集的数量,并通过子查询来排除前几条记录...

    sqlserver 分页集合.rar

    "sqlserver 分页集合.rar"这个压缩包很可能包含了关于在SQL Server中实现分页查询的各种示例、教程或者脚本。 分页查询的基本原理是通过限制返回的数据行数以及指定数据的起始位置来实现。在SQL Server中,有两种...

    关于SQL 数据分页

    在实际应用中,更常见的是使用`OFFSET`和`FETCH NEXT`(在SQL Server 2012及更高版本中)或者`LIMIT`和`OFFSET`(在MySQL等系统中)来实现分页,这些方法通常更有效率,尤其是当配合索引使用时。 为了优化性能,应...

    SQL分页语句

    本文将详细介绍几种常用的SQL分页技术,包括不同版本的SQL Server(如SQL Server 2000、2005)中的实现方法,并对每种方法进行深入解析。 #### 1. 使用`NOT IN`子句的分页方法(SQL Server 2000/2005) **SQL语句...

    c#与sql简单分页程序

    对于分页,我们通常会使用`SELECT`语句配合`OFFSET`和`FETCH NEXT`(在SQL Server中)或`LIMIT`和`OFFSET`(在MySQL中)来实现。 在这个“c#与sql简单分页程序”中,关键的步骤可能包括以下几点: 1. **建立数据库...

    SQL server分页

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

    sql分页的几种方法

    ### SQL分页的几种方法 #### 背景介绍 在数据库操作中,分页是一项非常常见的需求。尤其是在处理大量数据时,为了提高查询效率、减少服务器负担,并为用户提供更好的体验,分页变得尤为重要。SQL提供了多种实现分页...

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

    本文将探讨几种不同的分页查询方法,并通过实际测试来比较它们的效率,以找出最佳实践。 首先,我们来看第一种方案,这是最直观但效率较低的方法。它通过`NOT IN`子查询来排除前45000条记录,然后取前30条记录。...

    Oracle与SQL的分页实现

    在IT领域,数据库查询...Oracle和SQL Server提供了多种实现分页查询的方法,各有特点。开发人员应根据具体的应用场景和数据库性能需求,选择最合适的分页策略。同时,持续关注数据库性能优化,以确保系统的高效运行。

    sqlserver分页的存储过程

    综上所述,SQL Server的分页查询可以通过存储过程实现,提供了一种灵活的方式来控制返回的数据量。通过合理设计和调优,这种分页方法能够在保证性能的同时,为用户带来更好的浏览体验。在实际应用中,可以根据具体...

Global site tag (gtag.js) - Google Analytics