一张表,没有任何索引,select的时候,是按照什么顺去读的呢?

[复制链接]
查看11 | 回复9 | 2009-7-22 09:30:00 | 显示全部楼层 |阅读模式
一张表,没有任何索引,当然也没有主键,没有任何约束
select的时候,是按照什么顺序去读的呢?
如果 select rowid from table order by name
又是按照什么顺序读的呢?
select * FROM(
select rowid from table order by name) WHERE ROWNUM<=5

表的记录,物理上是怎么存储(顺序)的呢?不考虑索引?
XIEXIE
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
1:如果走全表扫描,会使用multi_block_read,没有确定的顺序。
2:select rowid from table order by name ,和前面一样,只不过多结果集排序。
3:select * FROM(
select rowid from table order by name) WHERE ROWNUM<=5
排完序之后再设个计数点 5,读到这个点就停止。
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
我说得通俗点吧
假设在延安路,有N个店铺,都有门牌号码
那么我要访问(SELECT)这路上的所有店铺,走的是全表扫描,
难道每次访问的顺序不一样吗?
如果是如楼上说的,没有确定的顺序,
那有没有官方的说明?
我想着,记录存储在数据库里,总有个物理上的顺序吧?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
会按rowid的顺序读取吧
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
最初由 SHSUMMER 发布
[B]我说得通俗点吧
假设在延安路,有N个店铺,都有门牌号码
那么我要访问(SELECT)这路上的所有店铺,走的是全表扫描,
难道每次访问的顺序不一样吗?
如果是如楼上说的,没有确定的顺序,
那有没有官方的说明?
我想着,记录存储在数据库里,总有个物理上的顺序吧? [/B]


第一次的访问是不确定的
后面的参考第一次了!
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
最初由 SHSUMMER 发布
[B]我说得通俗点吧
假设在延安路,有N个店铺,都有门牌号码
那么我要访问(SELECT)这路上的所有店铺,走的是全表扫描,
难道每次访问的顺序不一样吗?
如果是如楼上说的,没有确定的顺序,
那有没有官方的说明?
我想着,记录存储在数据库里,总有个物理上的顺序吧? [/B]

当你的所要查询的表处于一个静止的状态,数据是按照这个顺序读取的:
file-extent-block-slot-row
如果你的表处于的一个动态的环境下,拿你的例子来说就是,今天这个店铺在在延安路,明天拆迁到了淮海路,后天又到了世纪大道,那样是没有顺序可讲的。
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
想问一下LZ,假设你知道了这个"顺序",那么你想做什么呢?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
最初由 alantany 发布
[B]
当你的所要查询的表处于一个静止的状态,数据是按照这个顺序读取的:
file-extent-block-slot-row
如果你的表处于的一个动态的环境下,拿你的例子来说就是,今天这个店铺在在延安路,明天拆迁到了淮海路,后天又到了世纪大道,那样是没有顺序可讲的。 [/B]

Oracle在读取表的记录是,必然是有规则的
即使是按你说的,"不确定",这个不确定也是规则,怎么个不确定呢?
在读取记录的时候,必然有先后顺序的
这个顺序Oracle怎么规定的呢?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
file-extent-block-slot-row
这就是规则
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
最初由 luckysea 发布
[B]file-extent-block-slot-row
这就是规则 [/B]

谢谢,但是这样说别人是看不懂的
或者能否提供官方文档链接
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行