牛新庄__循序渐进DB2+DBA系统管理、运维与应用案例

5.3 索引设计

 

索引设计学习笔记,以及一些不能理解的问题(红色的是有疑问的问题)

 

标准表的逻辑表 记录 和索引结构


1、数据在逻辑上,按 数据页 的列表 来组织的

 

2、数据页,则根据 extent 的大小,在逻辑上分组在一起。

例如:extent大小为4,则 数据页0-3 组成了 第一个extent;数据页4-7 组成了 第二个extent

 

3、数据页的大小是一定的(4k, 8k, 16k, 32k),但是,每条记录大小可能不同(即使同一个表,其各个数据行的大小 也可能不同)。 对于一个给定的数据页(就是说:数据页大小定了。但是,其上的各个数据行大小可能各不相同),这个页所包含的数据条目可能会有所变化

 

4、每个第500个数据页都有一个FSCR,此FSCR用来映射接下来的500个数据页(直到下一个FSCR止)可供新数据行使用的空间

 

5、索引也是需要存储的,并且索引存储在 索引页 上面。在逻辑上,索引页组织成 B+树。对于DMS表空间,索引页中的RID使用 相对表空间页号 而不是 对象相对页号

 

6、每个 数据页 都有相同的格式。

 




a) 每个 数据页 都有一个 页头

b) 页头后面是 槽目录

c) 槽目录 中的每一项 与 该页中的一个记录相对应(当然也是说:槽目录中有几项,则此数据页上面就会有几个记录 也就是有几个数据行)

d) 槽目录中的每个项里面的数值指示:其对应的数据行在此页中 相对于开始位置的 字节偏移

e) 值为-1的条目与已删除的记录相对应

 

例如,对于上图(上面两个图其实是一样的),解释如下:

RID是:473,0

1、此索引所执行的数据 位于: 数据页 473

2、在找到 473 页上面,第 0 个槽号

3、此槽号中的值(3800)表示,此索引所指向的数据行,在此页中的字节偏移是 3800

4、DBMS读取索引所指向的数据时候,就可以:在 473 页上,偏移 3800 个字节去读取即可

 

不过,我还是有个问题,偏移 3800 个字节去读取,但是,要读取多少个字节啊(也就是说,此数据行长度是多少啊,而且,按着我的理解,即使同一个表,其每个数据行也可能是会变化的啊)

 

7、实际删除记录后,会在 数据页 上留下的 嵌入可用空间,对于这些空间,重组表时,这些 嵌入可用空间 会被转换成 可用空间(这也意味着,如果 不 重组表,则 嵌入可用空间 就会被一直浪费着)

 

 

8、明天好好理解下 索引的 B+树结构