作者fantasyj (如梦似幻)
看板Database
标题Re: [SQL ] ROWID
时间Sun Jul 3 18:40:11 2011
※ 引述《bohei (run and fall)》之铭言:
: 不知道有没有人知道这个东西QQ
: 每一ROW一定会有一个ROWID
: 我在网路上搜寻到的资料是ROWID会随着TABLE改变而改变
: 如果有一个查询、新增的程式
: 他利用ROWID去做搜寻的动作
: 在TABLE修改後也马上更新PK跟ROWID之间的关系
: 他用ROWID当搜寻条件而不用PK
: 目的只是为了搜寻速度吗?
: 用了ROWID当条件做搜寻
: 在资料量很大很大的时候
: 速度会远比用PK当条件还快吗?
: 还麻烦各位高手解答!
ROWID在Oracle是个16进位的字串,代表Table中每一条row的唯一位置,
是由Object Number + File Number + Block Number + Row Number组成,
也就是纪录每一笔record的真实逻辑位置,所以以它来当查询条件是最快的。
Create Index其实建立的就是与ROWID之间的关联
Query Data --> Use Index --> ROWID --> Table
但由於ROWID是由Oracle DB自行维护(包含Index所对应的),所以它是会变动的,
所以一般还是会Create Unique Index来使用。
那何时会使用到ROWID呢?以我个人的经验是假设要对Table进行Update时,
需要手动Lock Row
BEGIN
FOR C_TEST IN (SELECT rowid row_id, *
FROM table A
FOR UPDATE) LOOP
........
........
UPDAYE table A
SET ........
WHERE A.rowid = C_TEST.row_id;
END LOOP;
END;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.117.122.251