天天看点

关于索引的总结[收集中]

1、索引键值,就是表上被索引的(那些)列的值。

2、关于学习逐步了解索引的步骤:索引的用法-----》实现索引的原理-----》实践总结各种索引适用的情况

3、为表上的列添加一个索引后,每当有一个DML操作时,都要去修改维护索引(上的索引条目)。还有索引本身也要占用一定存储空间。这两点是使用索引带来的成本。

4、关于B树索引的高度问题(深入研究B树索引(四)的B树索引的分裂机制):

      首先,我们知道,根节点、分支节点、叶子节点都是索引块。而每个索引块里能存放的索引条目都是有最大值的。所以,叶子节点越来越多后,它上一层的分支节点也就会越来越多,以至于根节点放不下那么多对应于下一层分支节点的索引条目时,就需要增加一层分支节点。这样,索引高度就增加了一层。

     索引的高度至少为一层,即只有一个叶子节点(当表为空时,它的索引就是如此)。

下面摘自《深入研究B树索引(四)》:

   当一开始在一个空的表上创建索引的时候,该索引没有根节点,只有一个叶子节点。我们以树状形式转储上面的索引idx_test。

SQL> select object_id from user_objects where object_name='IDX_TEST';

OBJECT_ID

----------

     7390

SQL> alter session set events 'immediate trace name treedump level 7390';

      从转储文件可以看到,该索引中只有一个叶子节点(leaf)。

----- begin tree dump

leaf: 0x1c001a2 29360546 (0: nrow: 0 rrow: 0)

----- end tree dump

5、表上被索引的列的值在表上排序的越有顺序,则索引的clustering-factor值就越小。

参见        

  1. 深入研究B树索引五
    1. 重建B树索引
      1. 如何重建B树索引
      2. 重建B树索引对于clustering_factor的影响

6、表A上的列b加了索引index,则select * from A  或是select * from A where b=‘abc’时可能会用到索引(扫描)查询【最终要不要用索引查询有CBO优化器决定】。

而当select * from A where中的限制条件不含有列b时,则不会用索引查询吗?

继续阅读