分享三种高效率SQL语句分页方法
1.如果有一个自动增长的id字段,则:
定义二个变量:Page,PageCount
Select top PageCount * From [tb_code] Where id>=(select min(id) from (select top (Page-1)*PageCount+1 id from [tb_code] order by id desc) as t) order by id desc
原理,根据ID计算出(Page-1)页的最小值,然后用TOP关键字及可解决问题。
2.SELECT TOP 10 id,username From [tb_code] where id not in
( SELECT TOP 20000 id FROM tb_code ORDER BY username)
优点:此方法可以根据表中的任一个字段排序,在一个表中有几百万条记录时,仍有很高的效率,缺点是在大数据量的情况下效率略逊于第一种
3.SELECT TOP 10 id,username From
(SELECT TOP page*pagecount id, username FROM tb_code ORDER BY username)
DERIVEDTBL ORDER BY username DESC
优点:此方法可以根据表中的任一个字段排序.
缺点是效率最低
在SQL Server 2005中使用rownum分页(rownum函数使用方法介绍)
比方说要从表USER中查看第10到第20条之间的数据,那么SQL是这样实现的
SELECT * FROM (SELECT rownum rowcount,USER.* FROM USER) WHERE ROWCOUNT >=10 AND ROWCOUNT <20
其中函数ROWNUM,用来记录每一条数据所在的位置。
相关推荐
-
mysql分页原理和高效率的mysql分页查询语句
以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我们又该怎么做呢? 第一部分:看一下分页的基本原理: 复制代码 代码如下: mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20***************** 1. row **************id: 1select_type: SIMPLEtable: m
-
高效的SQLSERVER分页查询(推荐)
第一种方案.最简单.普通的方法: 复制代码 代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC 平均查询100次所需时间:45s 第二种方案: 复制代码 代码如下: SELECT * FROM ( SELECT TOP 30 * FROM (SELECT TOP 4503
-
mysql limit分页优化方法分享
同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自MySQL手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优化的,很不错. 文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据.根据他的数据,明显要好于直接使用limit.这
-
oracle,mysql,SqlServer三种数据库的分页查询的实例
MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE - LIMIT 10; #返回前10行select * from table WHERE - LIMIT 0,10; #返回前
-
java分页拦截类实现sql自动分页
本文实例为大家分享了完整的java分页拦截类,供大家参考,具体内容如下 package com.opms.interceptor; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import org.apache.ibatis.executor.p
-
sqlserver2005使用row_number() over分页的实现方法
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR> 例子: 复制代码 代码如下: select * from ( select *, ROW_NUMBER() OVER(Order by a.CreateTime DESC ) AS RowNumber from table_name as a ) as b where RowNumber BETWEEN 1 and 5 将会返回table表 其中有一列名字为 RowNu
-
SQL SERVER 2008 中三种分页方法与比较
建立表: 复制代码 代码如下: 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_
-
MySQL 百万级分页优化(Mysql千万级快速分页)
以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 复制代码 代码如下: SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候,这样写会慢死 复制代码 代码如下: SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 也许耗费几十秒 网上很多优化的方法是这样的 复制代码 代码如下: SELECT * FROM table WHERE id >= (SELECT id FROM
-
php+mysql分页代码详解
复制代码 代码如下: <?php $perpagenum = 10;//定义每页显示几条 $total = mysql_fetch_array(mysql_query("select count(*) from a"));//查询数据库中一共有多少条数据 $Total = $total[0]; // $Totalpage = ceil($Total/$perpagenum);//上舍,取整 if(!i
-
Oracle实现分页查询的SQL语法汇总
本文实例汇总了Oracle实现分页查询的SQL语法,整理给大家供大家参考之用,详情如下: 1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然! sql语句如下: SELECT * FROM (Select ROWNUM AS ROWNO, T.* from k_task T where Flight_date between to_date('20060501', 'yyyymmdd') and to_d
随机推荐
- 要慎用mysql的enum字段的原因
- IOS 开发之UIView动画的实例详解
- Linux 发邮件磁盘空间监控(python)
- Python利用带权重随机数解决抽奖和游戏爆装备问题
- 无JS,完全php面向过程数据分页实现代码
- asp去除html的函数代码分析附实例说明
- php daddslashes()和 saddslashes()有哪些区别分析
- 在线引用最新jquery文件的实现方法
- 菜鸟学习JavaScript小实验之函数引用
- javascript事件处理模型实例说明
- jQuery插件开发发送短信倒计时功能代码
- python爬虫框架scrapy实战之爬取京东商城进阶篇
- js文件中调用js的实现方法小结
- RealPlay11 安装过程遭遇CNNIC附清除办法
- 使用反向ssh从外网访问内网主机的方法详解
- Win2003安装IIS6.0不支持ASP的解决方法图文教程
- 基于大端法、小端法以及网络字节序的深入理解
- android仿微信支付宝的支付密码输入框示例
- C#算法之大牛生小牛的问题高效解决方法
- 基于casperjs和resemble.js实现一个像素对比服务详解