熟悉oracle的人都知道ROWID可用于快速的数据访问,KingbaseES 由于自身MVCC机制的原因,ctid 作为 oracle rowid 的替代方案不合适,但currtid 还是基本可以满足rowid 的功能的。本文向大家介绍如何通过currtid 实现rowid 的功能。
一、Oracle ROWID
Oracle ROWID 记录了tuple的物理存储位置,通过ROWID可以非常快速地访问tuple。因此,在极致性能的应用设计里,经常会使用到ROWID。典型的使用场景如下:
declare
cursor cur01 as select rowid from tab1;
begin
......
update tab1 where rowid='xxx';
end;
二、KingbaseES CTID
我们知道,对于Oracle ,一条tuple的ROWID正常是不会变化的(引发row movement的操作除外,如:跨分区迁移update,表shrink),因此,应用设计上可以方便的使用rowid,加快访问速度。而对于KingbaseES,也有类似Oracle ROWID的ctid,格式 “(blockid,slotid)”,同样记录了tuple存储的物理位置,通过ctid也能快速的访问数据。但由于KingbaseES的多版本(MVCC)读实现机制的差异,ctid会随update操作变化,这种情况下,使用ctid有可能因为tuple被update