三种SQL分页方式

1.分页方案一:(利用Not In和SELECT TOP分页)

  语句形式:

SELECTTOP10*FROMTestTableWHERE(IDNOTIN     (SELECTTOP20id    FROMTestTable    ORDERBYid))ORDERBYIDSELECTTOP页大小*FROMTestTableWHERE(IDNOTIN     (SELECTTOP页大小*页数id    FROM表    ORDERBYid))ORDERBYID

  2.分页方案二:(利用ID大于多少和SELECT TOP分页)

  语句形式:

  SELECTTOP10*FROMTestTableWHERE(ID>     (SELECTMAX(id)    FROM(SELECTTOP20id        FROMTestTable        ORDERBYid)AST))ORDERBYIDSELECTTOP页大小*FROMTestTableWHERE(ID>     (SELECTMAX(id)    FROM(SELECTTOP页大小*页数id        FROM表        ORDERBYid)AST))ORDERBYID

  3.分页方案三:(利用SQL的游标存储过程分页)

create procedureSqlPager@sqlstrnvarchar(4000),--查询字符串@currentpageint,--第N页@pagesizeint--每页行数assetnocountondeclare@P1int,--P1是游标的id@rowcountintexecsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutputselectceiling(1.0*@rowcount/@pagesize)as总页数--,@rowcountas总行数,@currentpageas当前页set@currentpage=(@currentpage-1)*@pagesize+1execsp_cursorfetch@P1,16,@currentpage,@pagesizeexecsp_cursorclose@P1setnocountoff

  其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。

  建议优化的时候,加上主键和索引,查询效率会提高。

  通过SQL 查询分析器,显示比较:我的结论是:

  分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句,第一页不可用 select top 0

  分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句

  分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用

时间: 2024-10-10 16:43:50

三种SQL分页方式的相关文章

三种SQL分页法效率分析

表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用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

三种SQL分页查询的存储过程代码

复制代码 代码如下: --根据MAX(MIN)ID CREATE PROC [dbo].[proc_select_id] @pageindex int=1,--当前页数 @pagesize int=10,--每页大小 @tablename VARCHAR(50)='',--表名 @fields VARCHAR(1000)='',--查询的字段集合 @keyid VARCHAR(50)='',--主键 @condition NVARCHAR(1000)='',--查询条件 @orderstr VA

Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍

先来定义分页语句将要用到的几个参数: int currentPage ; //当前页 int pageRecord ; //每页显示记录数 以之前的ADDRESSBOOK数据表为例(每页显示10条记录): 一.SqlServe下载 分页语句 String sql = "select top "+pageRecord +" * from addressbook where id not in (select top "+(currentPage-)*pageRecor

LVS:三种负载均衡方式比较+另三种负载均衡方式

什么是LVS?   首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的.高可用的虚拟服务器.整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序.   为此,在设计时需要考虑系统的透明性.可伸缩性.高可用性和易管理性.一般来说,LVS集群

Apache Spark三种分布式部署方式比较

其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配).本文将介绍这三种部署方式,并比较其优缺点. standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统.从一定程度上说,该

深入浅析JavaScript中对事件的三种监听方式_javascript技巧

事件(Event)是JavaScript应用跳动的心脏,也是把所有东西粘在一起的胶水,当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了. 第一种监听方式,也是最普遍使用的方式,是直接在代码上加载事件,产生效果: <table> <tr onmouseover='this.style.backgroundColor="red"' onmouseout='this.style.backgroundColor=""'><td>

VMware的三种网络连接方式区别_VMware

关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三种连接方式作一一说明,也方便以后翻阅当参考用. 首先,要注意安装完VMware后,控制面板\网络和 Internet\网络连接会多出两块虚拟网卡VMnet1.VMnet2,两个网卡各有用途. 基本拓扑 虚拟机(Linux) IP信息 测试结果: 物理主机 Ping 虚拟机 虚拟机1Ping物理主机

windows phone 三种数据共享的方式(8)

原文:windows phone 三种数据共享的方式(8)  本节实现的内容是数据共享,实现的效果描述:首先是建立两个页面,当页面MainPage通过事件导航到页面SecondPage是,我们需要将MainPage中的一些内容(比如一个字符串)传递到SecondPage中,SecondPage页面就出呈现出传递来的内容,当页面SecondPage通过事件导航到页面MainPage的时候,我们也把一些内容(比如一个字符串)传递与页面MainPage: 在建立的MainPage.xaml文件中我只添

虚拟磁带库三种主要实现方式及发展趋势

虚拟磁带库作为近年来兴起的 众多 磁盘备份( Backup to http://www.aliyun.com/zixun/aggregation/29800.html">Disk)解决方案中最受瞩目的一项,正在深刻地改变着传统的备份市场格局和用户的数据保护模式. 虚拟磁带库的三种主要实现方式 目前市场上的虚拟磁带库依照架构不同,大概可以分为三种类型:备份软件型(D2D).应用服务器型(VTL Appliance).智能化专用型(Intelligent High Preformance VT