update某条记录的时候,如果index key column也被update了,那么在找到index entry后,先对旧的index entry做一个pseudo delete,再插入一条新的index entry(new key+old rid), 那么找到RID后,在data page上把old column value替换成new column value。
在这种场景下,尽管data page没发生多大变化,但是每次update就会产生一个pseudo index entry,这样就加大了维护index的负担,pseudo index entry在物理上也是占据存储空间的,频繁的update操作就会产生大量的pseudo index entry, 从而导致index split,而DB2z也有机制去清理pseudo index page,这些都会导致lotch/lock on index, 过多的维护index必然导致index效率低下。
通过DSN1PRNT可以看到update前后data/index的情况
update之前data page log+ dsn1prnt
update之前index leaf page+dsn1prnt
update后index leaf page+ DSN1PRNT
update后data page log+DSN1PRNT