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值就越小。
参见
6、表A上的列b加了索引index,则select * from A 或是select * from A where b=‘abc’时可能会用到索引(扫描)查询【最终要不要用索引查询有CBO优化器决定】。而当select * from A where中的限制条件不含有列b时,则不会用索引查询吗?