(转)深入研究B树目录(四)续
(转)深入研究B树索引(四)续在介绍删除索引键值的机制之前,先介绍与索引相关的一个比较重要的视图:index_st
(转)深入研究B树索引(四)续
在介绍删除索引键值的机制之前,先介绍与索引相关的一个比较重要的视图:index_stats。该视图显示了
在视图index_stats中,height表示B树索引的高度;blocks表示分配了的索引块数,包括还没有被使用的;pct_used表示当前索引中被使用了的空间的百分比。其值是通过该视图中的(used_space/btree_space)*100计算而来。used_space表示已经使用的空间,而btree_space表示索引所占的总空间;del_lf_rows表示被删除的记录行数(表里的数据被删除并不会立即将其对应于索引里的索引条目清除出索引块,我们后面会说到);del_lf_rows_len表示被删除的记录所占的总空间;lf_rows表示索引中包含的总记录行数,包括已经被删除的记录行数。这样的话,索引中未被删除的记录行数就是lf_rows-del_lf_rows。同时我们可以计算未被删除的记录所对应的索引条目(也就是有效索引条目)所占用的空间为((used_space – del_lf_rows_len) / btree_space) * 100。然后,我们还是接着上个例子(最后插入了12*2的例子)来测试一下。这时我们已经知道,该例中的索引具有两个叶子节点,一个叶子节点(块号为419)包含10、12、14、16、18、20、22、24和2a,而另一个叶子节点(块号为420)包含4a、6a和8a。我们插入41、42、43、44、45、46、47和48各8条记录,这时可以知道这8条记录所对应的索引条目将会进入索引块420中,从而该块420被充满。
我们先分析索引从而填充index_stats视图。然后我们删除位于索引块419里的索引条目,包括10、12、14、16各4条记录。我们分析索引,看看index_stats视图会如何变化。我们继续测试第二种情况:我们看看index_stats视图会如何变化。其结果也符合我们从转储文件中所看到的内容。尽管被删除的索引条目所占用的空间大部分情况下都能够被重用,但仍然存在一些情况可能导致索引空间对于如何判断索引是否出现碎片,方法非常简单:直接运行ANALYZE INDEX … VALIDATE STRUCTURE
而对于值被更新对于索引条目的影响,则可以认为是删除和插入的组合。也就是将被更新的旧值对应的索
图4