楼主: DragonBill

[精华] ROWNUM与ORDER BY联用时对结果集的影响

[复制链接]
论坛徽章:
8
数据库板块每日发贴之星
日期:2009-06-12 01:01:02数据库板块每日发贴之星
日期:2009-06-21 01:01:01ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272010广州亚运会纪念徽章:游泳
日期:2010-11-12 16:42:092011新春纪念徽章
日期:2011-02-18 11:42:502010广州亚运会纪念徽章:三项全能
日期:2011-02-26 13:07:50咸鸭蛋
日期:2011-08-30 15:51:05ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22
31#
发表于 2011-6-7 14:40 | 只看该作者
支持原创作品。

使用道具 举报

回复
论坛徽章:
4
蜘蛛蛋
日期:2011-06-08 16:02:522012新春纪念徽章
日期:2012-01-04 11:58:18秀才
日期:2016-08-05 10:38:01秀才
日期:2016-08-05 10:38:11
32#
发表于 2011-6-7 16:41 | 只看该作者
原帖由 zhangfengh 于 2008-3-28 15:16 发表
因为你的a表只有id这一个字段,而且主键就建立在它上面,所以select *时才会用到INDEX FULL SCAN,在索引中能够得到所有的结果,如果加几个字段,索引中得不到所有的结果,就不一定用INDEX FULL SCAN了

我觉得楼主关于order by是主键的理论的原因就是因为用了INDEX FULL SCAN,留住发现的是现象,而指出原因是INDEX FULL SCAN的那位看到的是本质

使用道具 举报

回复
论坛徽章:
7
茶鸡蛋
日期:2011-06-01 15:43:13咸鸭蛋
日期:2011-08-26 20:26:48ITPUB十周年纪念徽章
日期:2011-09-27 16:34:13ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29奥运会纪念徽章:赛艇
日期:2012-09-14 12:36:39现代
日期:2013-11-05 15:52:20优秀写手
日期:2013-12-24 06:00:13
33#
发表于 2011-6-7 17:23 | 只看该作者
学习了!

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
34#
发表于 2011-9-14 18:14 | 只看该作者
不错。。。

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51
35#
发表于 2011-9-28 22:45 | 只看该作者
不错,支持原创。

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
36#
发表于 2013-1-4 14:41 | 只看该作者
精品啊

使用道具 举报

回复
论坛徽章:
0
37#
发表于 2013-1-28 15:09 | 只看该作者
支持原创

使用道具 举报

回复
论坛徽章:
3
鲜花蛋
日期:2011-12-09 15:07:542012新春纪念徽章
日期:2012-01-04 11:58:182013年新春福章
日期:2013-02-25 14:51:24
38#
发表于 2013-3-13 22:09 | 只看该作者
受用

使用道具 举报

回复
论坛徽章:
0
39#
发表于 2013-7-30 16:38 | 只看该作者
我怎么在ORACLE 11G 上验证, 不是这样的啊!!


SELECT ID, NAME, ROWID FROM TEST WHERE ROWNUM < 6 ORDER BY name  ;

99        John        AABr9cAAGAAADbuAAA
1        John        AABr9cAAGAAADbuAAB
2        Julie        AABr9cAAGAAADbuAAD
3        Stacy        AABr9cAAGAAADbuAAE
4        Tim        AABr9cAAGAAADbuAAC


SELECT ID, NAME, ROWID FROM TEST WHERE ROWNUM < 6 ORDER BY id  ;

1        John        AABr9cAAGAAADbuAAB
2        Julie        AABr9cAAGAAADbuAAD
3        Stacy        AABr9cAAGAAADbuAAE
4        Tim        AABr9cAAGAAADbuAAC
99        John        AABr9cAAGAAADbuAAA



无论是ID,还是name ORDER BY, 显示的记录都一样, 99这个值还是被查询出来了。

test 表的ID 确实有主键。。


使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
11
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34懒羊羊
日期:2015-03-04 14:52:11懒羊羊
日期:2015-02-10 13:36:05马上有对象
日期:2015-02-02 12:29:02红宝石
日期:2015-01-19 09:44:10马上有车
日期:2014-11-11 14:16:07马上有车
日期:2014-03-27 15:59:39优秀写手
日期:2014-03-12 06:00:13马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
40#
发表于 2013-7-31 20:15 | 只看该作者
当rownum和order  by在一个语句级别中(同一层)使用的时候.看这个查询的数据是否从索引中获取(或者根据索引先得到rowid 然后定位行)的,如果不是,那么就是先查询出来,每行标上rownum,然后order by将结果重新排序,那么rownum的顺序是乱的。如果排序的数据是从索引中查询的,这样结果有序。这取决于执行计划,执行计划又和oracle优化器相关。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表