索引特点
索引的特点
(1)索引一旦建立,** Oracle管理系统会对其进行自动维护**, 而且由Oracle管理系统决定何时使用索引
(2)用户不用在查询语句中指定使用哪个索引
(3)在定义primary key或unique约束后系统自动在相应的列上创建索引
(4)用户也能按自己的需求,对指定单个字段或多个字段,添加索引
需要注意的是:Oracle是自动帮我们管理索引的,并且如果我们指定了primary key或者unique约束,系统会自动在对应的列上创建索引…
什么时候【要】创建索引
(1)表经常进行 SELECT 操作
(2)表很大(记录超多),记录内容分布范围很广
(3)列名经常在 WHERE 子句或连接条件中出现
什么时候【不要】创建索引
(1)表经常进行 INSERT/UPDATE/DELETE 操作
(2)表很小(记录超少)
(3)列名不经常作为连接条件或出现在 WHERE 子句中
索引优缺点:
索引加快数据库的检索速度
索引降低了插入、删除、修改等维护任务的速度(虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引)
唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能 索引需要占物理和数据空间
B树:
一个节点里边有多个元素
整棵树和节点内部的元素都进行了排序,左边小,右边大。
B+树:
一个节点里边有多个元素
叶子节点由指针联系起来的
有序
非叶子节点上的元素在叶子节点上都冗余了,也就是叶子节点中存储了所有的元素,并且排好序
为什么要使用B+树,而不用普通二叉树呢?
可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不是普通二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?
(1)为什么不是普通二叉树?
每个节点都只有左右两个子节点,对于数据量很大的话,这棵索引树的高度也就很高了。如果我们要查找一条数据,则需要从根节点开始向下遍历,由于索引也是存储在磁盘上的,而刚好你要查找的数据可能在叶子节点,那每一次向下查找子节点的过程都要读取一次磁盘,那么在一次查询中,树的高度就决定了需要读取多少次磁盘,这种查询效率肯定是不能接受的,因此就需要减少读取磁盘的次数,也就是减少树的高度,这样的话就只能采用多叉树。
(2)为什么不是平衡二叉树?
索引往往以索引文件的形式存储在磁盘上,构建的二叉查找树太大了,内存放不下,一般就放在磁盘上,用的时候从磁盘读入内存。如果知道了根节点所在的磁盘位置,首先应该将根节点读入内存,这里进行一个IO操作,判断目标值和