常见的索引相关问题

1.什么是索引? 
一种用于提升查询效率的数据库对象;
通过快速定位数据的方法,减少磁盘I/0操作;
索引信息与表独立存放。
2.索引的作用? 
协助快速查询、更新数据库表中数据。
为表设置索引要付出代价的:
一是增加了数据库的存储空间;
二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
3.索引的优缺点? 
创建索引可以大大提高系统的性能(优点):
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
增加索引也有许多不利的方面(缺点):
创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
4.什么样的字段适合建索引? 
唯一、不为空、经常被查询的字段。
5.常见的索引分类及其区别? 
按索引的数据结构来划分:
Hash索引:
索引只包含哈希值与行指针,结构十分紧凑,索引速度很快;
只支持等值比较查询,不支持进行范围查询;
索引存储是无序的,所以不支持排序。
B树索引:
每个节点都存储key和data,所有节点组成这棵树。
本质上是多路平衡查找树,查找效率接近与二分查找法。
搜索有可能在非叶子结点结束。
叶节点包含的关键字和其他节点包含的关键字是不重复的。
数据是有序的,适合范围查询。
B+树索引:
是b树的一种变体,查询性能更好。
中间节点不保存数据,能容纳更多节点元素,所有的中间节点起到索引作用;
只有叶子节点存储数据,所有的叶子结点使用链表相连;
数据是有序的,适合进行范围查询;
位图索引:
就是用位图表示的索引,对列的每个键值建立一个位图。
占用的空间非常小,创建和使用非常快。
适合列的基数很少、可枚举、重复值很多的场景。
适合数据不会被经常更新的场景。
按照索引的类型划分:
唯一索引:不允许其中任何两行具有相同值的索引。
主键索引:可以认为是特殊的唯一索引,仅利用主键建立的索引。
单一索引:任何一个单一数据项建立的索引。
复合索引:多个数据列建立的索引。
聚簇索引:利用主键建立的索引,其物理存放顺序与主键顺序一致。因为数据只有一个物理存放顺序,所以一个表只有一个聚簇索引。
非聚簇索引(二级索引,辅助索引):除了聚簇索引之外,其余所有的索引都是非聚簇索引。
6.Hash索引和B+树索引的区别? 
hash索引:等值查询效率高,不能排序,不能进行范围查询;
B+树索引:数据有序,适合范围查询。
7.B树和B+树的区别?
B树:
每个节点都存储key和data,所有节点组成这棵树。
叶节点包含的关键字和其他节点包含的关键字是不重复的。
B+树:
只有叶子节点存储数据;
有两个头指针:一个指向根节点,另一个指向关键字最小的叶节点;
中间节点不保存数据,能容纳更多节点元素;
叶子节点包含了这棵树的所有数据,所有的叶子结点使用链表相连,便于区间查找和遍历;
所有的中间节点起到索引作用。
8.为什么说B+树比B树更适合实际应用中的文件索引和数据库索引? 
B+树的磁盘读写代价更低
B+的内部结点并没有存储数据,因此其内部结点相对B树更小。如果把所有内部结点的关键字存放在同一盘块中,那么同一盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
B+树的查询效率更加稳定
由于非叶节点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
9.聚集索引和非聚集索引区别? 
聚合索引(clustered index):
聚集索引记录的排列顺序和索引的排列顺序一致,所以查询效率快,只要找到第一个索引值记录,其余就连续性的记录在物理也一样连续存放。
聚集索引对应的缺点就是修改慢, 因为为了保证表中记录的物理和索引顺序一致,在记录插入的时候,会对数据页重新排序。
非聚合索引(nonclustered index):
非聚集索引指定了表中记录的逻辑顺序,但是记录的物理顺序和索引不一定一致。
两种索引都采用B+树结构,非聚集索引的叶子层并不和实际数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针方式。
非聚集索引层次多,不会造成数据重排。
根本区别:
聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。

你可能感兴趣的:(java,oracle)