sql预计简单分页
在显示记录条目时往往要用到分页,一种常用的办法是利用各种数据库自带的定位接口对原始查询语句进行改写,从而只取出特定范围的某些记录。不同的数据库,查询定位接口是不一样的,下面做一汇总:
|
数据库 |
分页查询语句 |
说明 |
|
MySql |
"QUERY_SQL limit ?,?" | 使用limit关键字,第一个"?"是起始行号, 第二个"?"是返回条目数 |
|
Oracle |
SELECT * FROM |
结合rownum关键字,利用嵌套三层select 语句实现。第一个"?"表示终止行号, 第二个"?"表示其实行号 |
|
Sql Server |
尚无通用语句 | 可使用top n来返回前n条记录或使用存储过程 |
SQL Server
关于分页 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)”替换成数码。
MYSQL
SELECT * FROM TT LIMIT 1,20
SELECT * FROM TT LIMIT 21,30
/*
如果你是几千上万数据,就直接使用mysql自带的函数 limit的普通用法就ok了,如果是100万以上的数据,可能就要讲方法了,下面我们来做个百万级数据的分页查询语句.
mysql> select * from news where id>=(select id from news limit 490000,1) limit 10; //0.18 sec //很 明显,这 种方式胜出 .
mysql> select * from news limit 490000,10 //0.22 sec;
*/
以下的文章主要介绍的是MySQL分页的实际操作方案,其实关于实现MySQL分页的最简单的方法就是利用利用mysql数据库的LIMIT函数,LIMIT [offset,] rows可以从MySQL数据库表中第M条记录开始检索N条记录的语句为:
- SELECT * FROM 表名称 LIMIT M,N
例如从表Sys_option(主键为sys_id)中从第10条记录开始检索20条记录,语句如下:
- select * from sys_option limit 10,20
- select * from table [查询条件] order by id limit ?,?
Oracle
Oracle的分页查询语句基本上可以按照这篇了,下一篇文章会通过例子来申述。下面简单讨论一下多表联合的情况。对最多见的等值表连接查询,CBO 一般可能会采用两种连接方式NESTED LOOP以及HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个归回的最大记载数,NESTED LOOP在归回记载数跨越最大值时可以顿时遏制并将结果归回给中心层,而HASH JOIN必需处理完所有成集(MERGE JOIN也是)。那么在大部分的情况下,对分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问概率越小)。
因此,如果不介意在体系中使用HINT的话,可以将分页的查询语句改写为:
SELECT /*+ FIRST_ROWS */ * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
sql预计简单分页的更多相关文章
- 浅谈SQL Server数据库分页
数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...
- MVC简单分页
对Car汽车表分页 实现简单分页,放在这里方便查看回顾,自定义每页几条有点问题,有待完善······ 1.新建mvc项目 2.添加linq to sql 数据库连接 3.添加CarBF类 using ...
- Oracle实践--PL/SQL综合之分页存储过程
Oracle PL/SQL分页的存储过程 Oracle,分页,存储过程三个词结合起来,来个综合点的小练习,运用之前的PL/SQL创建一个分页的存储过程,仅仅须要简单几步就可以. 1.声明一个引用游标 ...
- DataGridView使用BindingNavigator实现简单分页功能
接上一篇<DataGridView使用自定义控件实现简单分页功能>,本篇使用BindingNavigator来实现简单分页功能.其实也只是借用了一个BindingNavigator空壳, ...
- JavaScript简单分页,兼容IE6,~3KB
简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- (转载)sql语句解决分页问题
<来源网址:http://www.delphifans.com/infoview/Article_353.html>sql语句解决分页问题日期:2005年1月17日 作者:treemon2 ...
- hibernate 对 sql server 2005 分页改进
Hibernate 可以实现分页查询 如下 Query q = session.createQuery("from Cat as c"); q.setFirstResult(100 ...
- ASP.net+SQL server2008简单的数据库增删改查 VS2012
工具:VS2012 数据库:SQL server 简单说明:根据老师上课给的代码,进行了简单的改正适用于VS2012环境,包括注册.登录.查询.修改.删除功能,多数参考了网上的代码 百度云源代码连接t ...
随机推荐
- 【转】【Python】Python正则表达式使用指导
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
- 采用MiniProfiler监控EF与.NET MVC项目
今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC MiniProfiler是Stack Overflow团队 ...
- 文字超过字符长度 显示… 点点点 jquery
在 script脚本区域里面定义如下方法 jQuery.fn.limit = function() { var self = $("[limit]"); self.each(fun ...
- C# 获取文件夹下的所有文件的文件名
String path = @"X:\xxx\xxx"; //第一种方法 var files = Directory.GetFiles(path, "*.txt" ...
- php json_decode无法解析特殊问好字符
在通过别人接口请求信息的时候,偶尔会遇到由于部分字符,如以下情况,则通过json_decode是会返回null的 但是这种情况通常不是由于整体编码的问题,因为在解析的时候就是以utf-8的编码解析的 ...
- 3d md5 demo
描述:场景3dmax做的,随便拖的几个东西 模型玩过游戏的都知道是doom3的怪兽猪脚 音频是openal播放的wav文件 下载地址:http://pan.baidu.com/s/1eQ8SYI2
- JAVA中的数字运算+号与字符串+号
(1)当“+”两边是非数值类型,“+”就被看作连接符. (2)当“+”两边都是数值类型,“+”就被看作算术运算中的加号. (3)当“+”一边是非数值,一边是数值类型,“+”就被看作连接符.
- phpcms v9模板制作教程(转载)
第一节 1.首先下载phpcms v9的集成安装包并安装,这里就不详细说明了. 2.本地调试建议大家使用APMserver,或者wampserver等,可以到PHPCMS吧官方网站首页链接下载.安装好 ...
- mysql中如何删除表上的索引?删除索引?
需求描述: 今天在做SQL的优化的时候,想要把mysql中某个表上的索引删除掉,突然忘记语法了,找到帮助,在此记录下 操作过程: 1.查看表上的索引 show index from ti_o_sms; ...
- Go 语言机制之逃逸分析
https://blog.csdn.net/weixin_38975685/article/details/79788254 Go 语言机制之逃逸分析 https://blog.csdn.net/ ...