- 浏览: 121568 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
maoghj:
dom4j API转载 -
hongdong1017:
[url][/url][flash=200,200][/fla ...
linux下如何执行.sh文件 -
hongdong1017:
[b][/b][i][/i][u][/u]引用
linux下如何执行.sh文件 -
shangfengying:
...
java web项目中web.xml的一点东西 -
12345678:
谢谢 ~ 我用的~Jon Galloway~~的
java项目清除svn信息
转贴:
网站开发中少不了需要分页查询,就会有需要查询第3、4、5、6条记录的要求,以下从mysql和oracle两种数据库的使用。
Mysql的数据库很简单:select * from upp_extend_info limit 3,4
下面简单说说变态的oracle:
一、最简单的全部选择:
SQL> select * from upp_extend_info t;
ID LINEAGE
---------- --------
100 lineage
2 lineage
13 lineage
8 lineage
17 lineage
9 lineage
11 lineage
12 lineage
16 lineage
14 lineage
15 lineage
18 lineage
7 lineage
3 lineage
4 lineage
15 rows selected
二、使用rownum属性选择前6条记录,并且组成新的表T
SQL> select * from (select * from upp_extend_info t) T where rownum<=6;
ID LINEAGE
---------- --------
100 lineage
2 lineage
13 lineage
8 lineage
17 lineage
9 lineage
6 rows selected
三、选择出前六条表以及rownum
SQL> select T.* ,rownum from (select * from upp_extend_info t) T where rownum<=6;
ID LINEAGE ROWNUM
---------- ------------ ------
100 lineage 1
2 lineage 2
13 lineage 3
8 lineage 4
17 lineage 5
9 lineage 6
6 rows selected
四、给rownum重命名为num,防止与外层rownum冲突
SQL> select T.* ,rownum num from (select * from upp_extend_info t) T where rownum<=6;
ID LINEAGE NUM
---------- --------------- ---
100 lineage 1
2 lineage 2
13 lineage 3
8 lineage 4
17 lineage 5
9 lineage 6
6 rows selected
五、根据num重新选择rownum大于3的行
SQL> select * from (select T.* ,rownum num from (select * from upp_extend_info t) T where rownum<=6) where num>=3;
ID LINEAGE NUM
---------- ------------------
13 lineage 3
8 lineage 4
17 lineage 5
9 lineage 6
总结:
mysql是提供默认的功能,指定 开始页码3 以及 行数4 来实现的分页
oracle不提供分页功能,需要用户自己实现,总的思路是先取出前6页组成新表,然后再计算出行数筛选出3-6条记录
终于感觉到mysql的傻瓜简单实在了吧!
================================***************=========================================
2009-8-11
今天看到一个分享,了解到DBA对oracle的分页方法进行优化,所以补充一个加强版!
假设activity_pepsi_dream表拥有 id, nick, auction_url, gmt_create 字段。
--普通写法(显示1-50页)
select * from (select T.* ,rownum num from (select * from upp_extend_info t) T where rownum<=6) where num>=3;
--rowid写法
select TTTT.*
from (select rid
from (select TT.rid,rownum num
from (select rowid rid
from upp_extend_info T)TT
where rownum<=6)
where num>=3)TTT,upp_extend_info TTTT
where TTT.rid=TTTT.rowid
性能比较:
---查询第一页普通写法要比rowid写法要快
---随着翻页次数的增多,普通写法需要回表的记录越来越多,性能下降很快。比如你要看200-250条的记录,这时候普通写法需要回表250条记录,而rowid写法只要会标200-250区间中的这50条记录
rowid 写法优化的情况:
--第一层必须都在索引中扫描,不回表
--第二三层找到满足条件的rowid
--最后根据rowid去回表找到记录
总结:关键就是oracle 的 rowid 属性可以最快速度的寻找到该行的数据,并且固定,不需要回表操作。
reference :http://tolywang.itpub.net/post/48/22612
1、rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。 2、rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来。
3、利用rowid是访问表中一行的最快方式。
4、rowid需要10个字节来存储,显示为18位的字符串。
rowid的组成结构为:
data object number(6位字符串)+relative file number(3位字符串)+block number(6位字符串)+row number(3位字符串),如:AAAADeAABAAAAZSAAA
5、我们可以借助oracle提供的包dbms_rowid,来对rowid进行解析从而获取关于行的相关信息:
bossdb-SQL>select
2 rowid,
3 dbms_rowid.rowid_object(rowid) obj_id,
4 dbms_rowid.rowid_relative_fno(rowid) df#,
5 dbms_rowid.rowid_block_number(rowid) blknum,
6 dbms_rowid.rowid_row_number(rowid) rowno
7 from p_test where rownum<5;
ROWID OBJ_ID DF# BLKNUM ROWNO
------------------ ---------- ---------- ---------- ----------
AAAQ+tAANAAAC6SAAA 69549 13 11922 0 AAAQ+tAANAAAC6SAAB 69549 13 11922 1 AAAQ+tAANAAAC6SAAC 69549 13 11922 2 AAAQ+tAANAAAC6SAAD 69549 13 11922 3
我们可以看到,通过rowid_row_number得到的行号是从0开始的,这是和rownum伪列的一个不同之处。我猜测rowid_row_number在求行号的时候是计算首行的偏移量。
一般来说,当表中的行确定后,rowid就不会发生变化。
但当如下情况发生时,rowid将发生改变:
1、对一个表做表空间的移动后
2、对一个表进行了EXP/IMP后
发表评论
-
oracle中带有特殊符号的模糊查询
2013-08-30 13:36 1111oracle中带有特 ... -
PL/SQL DEVELOPER执行计划的查看 (转)
2013-03-13 15:22 2725|字号 订阅 ... -
ORACLE执行计划
2013-01-14 15:06 723ORACLE执行计划,在pl/sql中点击F5 下面是执行 ... -
oracle数据库设计的一些东西
2013-01-14 15:04 0现在的项目组要求设计表的时候需要进行一些效率的考虑 我对这 ... -
数据库中的约束
2011-01-10 14:23 886我们在创建数据库的时 ... -
oracle和mysql的区别
2010-12-29 14:39 1030转贴: 1. Oracle是大型数据库而Mysql是中小型 ... -
oracle的锁机制
2010-12-22 13:12 840锁是一种机制,是用来管理对一个共享资源的并行访问。解停? 只有 ... -
oracle存入图片和文本
2010-12-21 11:09 1849转贴 java操作Oracle数据库中的Clob,Blob字 ... -
数据库表的关系
2010-12-16 13:23 1445表关系(一对一,一对多,多对多) 收藏 可以在数据库 ... -
数据库隔离级别
2010-12-14 15:27 959数据库中隔离级别有四种: ... -
oracle常用指令
2010-12-14 11:45 731转自百度 1、su – oracle 不是必需,适合于没有D ... -
各种数据库的JDBC配置以及在struts和hibernate中的配置
2010-12-14 11:30 9401、Oracle8/8i/9i数据库(th ... -
JDBC和JTA事务
2010-12-03 14:37 873事务简介 一般情况下,J2EE应用服务器支持JDBC ... -
oracle表空间的了解
2010-11-19 11:56 958转贴: 一、数据库的存储体系 上图就是O ... -
pl/sql访问远程数据库
2010-11-16 15:57 1005// 数据库配置文件目录 E:\oracle\ora92\ne ... -
在oracle中导入导出dmp数据库文件
2010-11-16 14:38 886Oracle数据导入导出imp/ ... -
数据库的一点东西
2010-11-12 09:59 818一个表空间只能属于一个数据库 ,每个数据库最少有 ... -
Oracle学习-Unix
2010-11-12 00:31 789二、在Unix下创建数据库 1.确定数据库名、数据库实例名和服 ... -
Oracle学习-Windows
2010-11-12 00:29 1173有两种创建数据库的方式,一种是以命令行脚本方式,即手动方式创建 ... -
Oracle学习
2010-11-11 23:30 766Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数 ...
相关推荐
本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server(这里用SQL代替)、MySQL中的实现方式,并对它们的性能进行对比分析。 #### 分页方案一:利用Not In和SELECT TOP分页 **基本...
是介绍使用mysql和oracle进行分页的技术,还说明了mysql和oracle分页的区别
除了Oracle和MySQL之外,还有其他数据库系统也支持分页查询,如SQL Server和DB2等。 **1. SQL Server:** - 使用`TOP`关键字和`NOT IN`子句实现分页。 - 示例代码: ```sql SELECT TOP @pagesize * FROM ...
本话题主要聚焦于如何在Oracle、MySQL和SQL Server这三种主流关系型数据库中实现分页联合查询。 首先,我们来看Oracle数据库的分页查询。Oracle使用ROWNUM关键字来实现分页。例如,如果我们想获取第10到20条记录,...
这个压缩包文件“一个关于基于ssm,mysql(也含oracle方式)实现的分页查询.rar”主要涉及到如何在SSM环境下,使用MySQL和Oracle数据库进行分页查询的实践案例。 首先,Spring作为核心容器,负责管理对象的生命周期...
本文将深入探讨MySQL与Oracle两种常用的数据库管理系统中的分页技术。 首先,我们来看MySQL的分页技术。MySQL提供了`LIMIT`子句来实现分页查询。`LIMIT m, n`语句用于限制查询结果的数量,其中`m`是起始索引,`n`是...
以下将详细介绍这些技术及其在分页中的应用。 1. JSP(JavaServer Pages):JSP是一种动态网页技术,允许开发人员在HTML或XML文档中嵌入Java代码。在分页场景中,JSP通常负责展示数据和处理用户交互,例如接收用户...
本文将深入探讨SQL Server、MySQL和Oracle这三种主流数据库系统中的分页查询实现方式。 首先,我们来看SQL Server。SQL Server提供了一种称为"TOP"的关键字来实现分页。例如,如果我们想获取第1页(假设每页有10条...
在Oracle、MySQL、SQL Server和DB2等不同的数据库系统中,分页实现方式有所不同。以下是对这些数据库分页策略的详细说明: 1. Oracle数据库分页: Oracle使用`ROWNUM`伪列进行分页。基本思路是先通过子查询获取所有...
本文将详细介绍Oracle、MySQL以及SQL Server这三种常用数据库管理系统中的分页查询实现方法。 #### 一、Oracle 分页查询 在Oracle中实现分页查询主要依靠`ROWNUM`伪列,这是一种非常简单但功能强大的机制。下面将...
mysql,oracle,sql server分页总结与比较
以上就是Oracle、MySQL和SQL Server三种数据库中分页查询的基本实现方法。通过这些方法,我们可以有效地处理大量数据的分页显示问题,提高应用程序的性能和用户体验。每种数据库的实现细节有所不同,因此在实际开发...
本文将详细介绍Oracle、MySQL、SQL Server和DB2这四种常见数据库的分页实现方案。 1. Oracle数据库分页: Oracle采用的是ROWNUM伪列,通过嵌套查询来实现分页。以下是一个示例: ```sql select * from ( select ...
2. **分页查询**:Oracle使用ROWNUM进行分页,而MySQL通常使用LIMIT和OFFSET。在转换过程中,需要将Oracle的ROWNUM替换为MySQL的LIMIT子句。 3. **连接查询**:Oracle的JOIN语法允许在ON条件中使用子查询,而在...
一、MySQL分页 MySQL采用`LIMIT`关键字来实现分页。`LIMIT`子句可以接受两个参数,第一个参数`m`表示开始位置(即第`m+1`行),第二个参数`n`表示要获取的行数(页面大小)。例如,要获取第二页(每页10行)的数据,...
不同的数据库管理系统(DBMS)有不同的分页查询语句,下面对 Oracle、DB2、SQL Server、MySQL、Access 等数据库的分页查询语句进行了整理。 SQL Server 分页查询 SQL Server 中有两种分页查询方法: 1. 第一种...
以下是针对Oracle、MySQL、SQL Server和DB2这四种常见数据库系统的分页实现方案的详细说明: 1. Oracle数据库: Oracle采用的是ROWNUM伪列来实现分页。以下是一个基本的分页查询示例: ```sql SELECT * FROM ( ...
在实际应用中,应根据具体的数据规模和查询需求选择合适的方法。 总的来说,MySQL的分页查询最为简洁,而SQL Server和Oracle的分页查询则提供了更多的灵活性和控制,但可能需要更多的理解与优化。无论选择哪种...
本教程将重点讲解Oracle和MySQL两个数据库系统中的分页实现。 Oracle数据库是全球广泛使用的商业关系型数据库管理系统,而MySQL则是一个开源、免费的数据库系统,两者在分页方面的实现有所不同。 在Oracle中,分页...
Oracle 和 MySQL 都提供了各自的分页解决方案。本文将深入探讨这两种数据库在分页方面的实现方式,并结合源码分析来阐述其工作原理。 Oracle 分页: 1. ROWNUM关键字:Oracle 中最基础的分页方式是通过ROWNUM伪列...