Informix创建表及索引的过程

数据库版本:12.10.FC6X5
操作系统:RHEL 6U4 64bit
目的:通过onlog命令熟悉创建表、创建索引的数据库内部操作过程

通过SQL语句创建一个表,只需

create table ttt
(
  col1 integer,
  col2 char(40),
  col3 varchar(40),
  col4 text
);

通过onlog -n <逻辑日志编号> 的输出,可知数据库内部需要完成如下操作:
请输入图片描述

1、开始事务
BEGIN(begin work):包含事务号、开始时间、用户;
2、获取tabid
UNIQID(Logged when a new SERIAL value is assigned to a row):获取systables中的tabid序号;
3、初始化partition页
BLDCL(Build tblspace):根据语句及获取的信息初始化tblspace页;
4、补充partition页信息 -- 有特殊字符需要。
PTCOLUMN(Add special columns to fragment):如果有特殊字段,往tblspace页中增加相应的信息;
5、往syscolumns表中增加表的字段信息
HINSERT(Home row insert):往syscolumns表中增加相应的字段;
ADDITEM(Add item to index): 往syscolumns表的索引中增加相应的记录;
注:创建的表ttt有4个字段,故HINSERT和两个ADDITEM(两个索引)重复了4次
6、往sysblobs表中增加特殊字段信息 -- 有特殊字符需要。
HINSERT(Home row insert):由于有text字段,需往sysblobs表中增加相应的字段;
ADDITEM(Add item to index): 往sysblobs表的索引中增加相应的记录;
7、往systables表中增加表信息
HINSERT(Home row insert):往systables表中增加记录;
ADDITEM(Add item to index): 往systables表的两个索引中增加相应的记录;
8、往systabauth表中增加表权限信息
HINSERT(Home row insert):往systabauth表中增加记录;
ADDITEM(Add item to index): 往systabauth表的两个索引中增加相应的记录;
9、完成操作,提交
COMMIT(commit work): 包含提交时间。

对于创建一个索引

create index ix_ttt on ttt(col1);

数据库内部需要完成如下操作:
请输入图片描述

1、开始事务
BEGIN(begin work):包含事务号、开始时间、用户;
2、初始化partition页
BLDCL(Build tblspace):根据语句及获取的信息初始化tblspace页;
3、分配extent
CHALLOC(Chunk extent allocation): 分配第一个extent;
4、Partition页扩展
PTEXTEND(Tblspace extend):如果没有可使用(或者用过)的partition页,需要扩展。如果有之前删除过的表而清空的parttion页,该页可以复用,如上面创建表中没有使用到PTEXTEND
5、修改索引的partition lockid
PNLOCKID(Change tblspaces lockid):修改partition页中该索引的partition lockid
6、创建索引
CINDEX(Create index):在partition页中初始化索引信息
7、systables中索引归属表ttt所在数据页前映像
HUPBEF(Home row update,before-image.):保留前映像
8、systables中索引归属表ttt所在数据页修改后映像
HUPAFT(Home row update,after-image.):更新映像
9、往sysindices中增加索引记录
HINSERT(Home row insert):往sysindices表中增加相应的字段;
ADDITEM(Add item to index): 往sysindices表的两个索引中增加相应的记录;
10、往sysobjstate表中
HINSERT(Home row insert):往sysobjstate表中增加相应的字段;
ADDITEM(Add item to index): 往sysobjstate表的两个索引中增加相应的记录;
11、往sysfragments表中增加表信息
HINSERT(Home row insert):往sysfragments表中增加记录;
ADDITEM(Add item to index): 往sysfragments表的索引中增加相应的记录;
12、systables中索引归属表ttt所在数据页前映像
HUPBEF(Home row update,before-image.):保留前映像
13、systables中索引归属表ttt所在数据页修改后映像
HUPAFT(Home row update,after-image.):更新映像
14、完成操作,提交
COMMIT(commit work): 包含提交时间。

标签: none

添加新评论

Free Web Hosting