sql查询分页

news/2024/7/10 4:07:51 标签: sql, sql server, sqlserver, 存储, 优化

SQLSERVER:

有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条 SQL 语句的分页 SQL 吧。

方法1:
适用于 SQL Server 2000/2005
SELECT   TOP  页大小  *
FROM  table1
WHERE  id  NOT   IN
          (
          
SELECT   TOP  页大小 * ( - 1 ) id  FROM  table1  ORDER   BY  id
          )
ORDER   BY  id

方法2:
适用于 SQL Server 2000/2005
SELECT   TOP  页大小  *
FROM  table1
WHERE  id  >
          (
          
SELECT   ISNULL ( MAX (id), 0
          FROM  
                (
               
SELECT   TOP  页大小 * ( - 1 ) id  FROM  table1  ORDER   BY  id
                ) 
A
          )
ORDER   BY  id

方法3:
适用于 SQL Server 2005

SELECT   TOP  页大小  *  
FROM  
        (
        
SELECT  ROW_NUMBER()  OVER  ( ORDER   BY  id)  AS  RowNumber, *   FROM  table1
        ) A
WHERE  RowNumber  >  页大小 * (页数 - 1 )


说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。 

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

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

 

 


http://www.niftyadmin.cn/n/1851642.html

相关文章

L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分)给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式&#xff…

Cisco RV320未经身份验证的配置导出

RedTeam Pentesting发现了Cisco RV320路由器可以通过无需身份验证的网络配置导出安全问题细节产品:Cisco RV320双千兆WAN VPN路由器,可能还有其他受影响的版本:1.4.2.15到1.4.2.20修正版本:无漏洞类型:信息披露安全风险…

如何判断statement插入是否成功

rows statement.executeUpdate(sql); if(rows>0){ // 成功 }else{ // 失败 }

.net操作word lib DocX

http://cathalscorner.blogspot.hk/2010/06/cathal-why-did-you-create-docx.html using (DocX document DocX.Load("C:\source\3.docx")) {   Formatting mFormattingnew Formatting(); document.ReplaceText("bbbb", "bbbaaaaaaaaaaa", fa…

2个日期之间有多少天

原因是夏令时间会造成计算错误,差一小时就是差一天,用毫秒数计算已经不是正确方法了。 现代标准就是尽量不要使用毫秒数计算日期。 以下是正确方法: public long daysBetween(Date start,Date end){long diff 0;if (start null || end …

[z]Java代理(jdk静态代理、动态代理和cglib动态代理)

一、代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强。加入一些非业务性代码,比如事务、日志、报警发邮件等操作。 二、jdk静态代理 1、业务接口 12345678910111213/*** 业务接口* author pc**/public inte…

oracle 链接问题

oracle 在服务器上运行正常,服务器ip例如 111.111.111.111 在服务器上运行的程序都可以正常链接,而通过远程链接的程序报错,链接失败! 1.首先检查服务器ip地址是否正确,ping 111.111.111.111 正常 2.检查oracle端口…

剑指offer--35.数组中只出现一次的数字

时间限制:1秒 空间限制:32768K 热度指数:198150本题知识点: 数组题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。class Solution {public:void FindNumsAppea…