1 概述
1. 异同点
(1) 相同点:都是 '伪列' -- Oracle 自动加上去的,无法人为操作
(2) 不同点:rowid 记录的物理地址,相对不变,
rownum 记录的编号,会变化,尤其是使用 order by 的时候
2. rownum:某条记录的编号 -- row num = 行编号
(1) "编号总是从 1 开始" :select 时返回的行的编号,第一行分配 1,第二行分配 2,以此类推
(2) "rownum >= 2 无数据返回":编号有 1 才有 2,必须从 1 开始
(3) "编号是变化的" :如:存在 order by 时
(4) "rowid 访问是最快的" -- 比索引更快!
3. rowid: 某条记录的物理地址 -- row id = 行标识
(1) "标识相对不变" :insert 时就已经确定,一般不变,除非 "行移动 row movement"
(2) "基于 64 位编码的 18 个字符显示":对象号(6) + 文件号(3) + 块号(6) + 行号(3)
(3) base 64 编码
A-Z 0-25
a-z 26-51
0-9 52-61
+/ 62-63
计算公式:d*(b^p)
d: 字符对应的十进制编码值
b: 64
p: 从右至左,每个对象从 0 开始计数
比如:AAAR3sAAEAAAACXAAA
对象号 AAAR3s 17*64^2 + 55*64^1 + 44 = 73196
文件号 AAE 4
块号 AAAACX 2*64^1 + 23 = 151
行号 AAA 0
2 详解
2.1 rownum
select t.empno, t.ename, t.hiredate, rownum from scott.emp t;
select t.empno, t.ename, t.hiredate, rownum from scott.emp t order by t.hiredate;
查询截图:(rownum 不一定是连续的哦)
原因解释:(sql 语句执行顺序,先 select 再 order by)
sql 语句执行顺序:
1. from -- 首位,sql入口
2. on
3. join
4. where
5. group by
6. having
7. select
8. distinct
9. order by
2.2 rowid
select rowid,
dbms_rowid.rowid_object(rowid) object_id, -- 数据对象id
dbms_rowid.rowid_relative_fno(rowid) relative_fno, -- 相对文件id
dbms_rowid.rowid_block_number(rowid) block_number, -- 数据块id
dbms_rowid.rowid_row_number(rowid) row_number -- 行id
from scott.emp;
查询截图:
解释说明:
AAAR3sAAEAAAACXAAA
数据对象id(6位):AAAR3s
0*64^5 + 0*64^4 + 0*64^3 + 17*64^2 + 54*64^1 + 44*64^0 = 73196
文件id(3位):AAE
0*64^2 + 0*64^1 + 4*64^0 = 4
块id(6位):AAAACX
2*64^1 + 23 = 151
行id(3位):AAA = 0
base 64 码表:
索引 | 字符 | 索引 | 字符 | 索引 | 字符 | 索引 | 字符 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | A | 26 | a | 52 | 1 | 62 | + | |||
1 | B | 27 | b | 53 | 2 | 63 | / | |||
2 | C | 28 | c | 54 | 3 | |||||
3 | D | 29 | d | 55 | 4 | |||||
4 | E | 30 | e | 56 | 5 | |||||
5 | F | 31 | f | 57 | 6 | |||||
6 | G | 32 | g | 58 | 7 | |||||
7 | H | 33 | h | 59 | 8 | |||||
8 | I | 34 | i | 60 | 9 | |||||
9 | J | 35 | j | |||||||
10 | K | 36 | k | |||||||
11 | L | 37 | l | |||||||
12 | M | 38 | m | |||||||
13 | N | 39 | n | |||||||
14 | O | 40 | o | |||||||
15 | P | 41 | p | |||||||
16 | Q | 42 | q | |||||||
17 | R | 43 | r | |||||||
18 | S | 44 | s | |||||||
19 | T | 45 | t | |||||||
20 | U | 46 | u | |||||||
21 | V | 47 | v | |||||||
22 | W | 48 | w | |||||||
23 | X | 49 | x | |||||||
24 | Y | 50 | y | |||||||
25 | Z | 51 | z |