牛新庄__循序渐进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+树结构