『壹』 红黑树,b+树分别用于什么场景,为什么
红黑树属于“黑平衡”的二叉树,虽然牺牲了一定的平衡性,但是add、remove操作要由优于AVL树也就是说RB-Tree的“统计性能”更佳!Java中TreeSet,TreeMap的底层都是基于RedBlackTree红黑树的;
B+树主要用在文件系统以及数据库做索引。比如磁盘存储、文件系统、MySQL数据库
『贰』 数据库中索引的结构和什么情况下不适合建索引
1>数据库中索引的结构是一种排序的数据结构。
2>数据库索引是通过B树和变形的B+树实现的。
3>什么情况下不适合建立索引?
1.对于在查询过程中很少使用或参考的列,不应该创建索引。
2.对于那些只有很少数据值的列,不应该创建索引。
3.对于那些定义为image,text和bit数据类型的列,不应该创建索引。
4.当修改性能远大于检索性能,不应该建立索引。
4>建立索引的优点?
1.通过创建唯一性的索引,可以保证表中每一行数据的唯一性;
2.可以大大加快表中数据的检索素的,这也是创建索引的主要原因;
3.可以加快表与表之间的链接,特别是在实现表与表之间的参考完整性实现有特别的意义;
4.通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统性能。
5>建立索引的缺点?
1.创建索引和维护索引耗时,时间随着数据的增加而增加,成正比;
2.索引需要占物理空间,除了数据表占数据空间外,每一个索引还要占一定的物理空间,如果建立聚簇索引,占得物理空间会更大;
3.当对表中的数据进行维护时,对索引也要进行维护,这样就降低了数据的维护速度。
可以在数据库中建立三种索引:唯一索引,主键索引,聚集索引。
唯一索引(unique) :不允许任意两行具有相同索引值的索引。
主键索引(primary):数据表中经常有一列或多列组合,其职唯一标识要求主键中的每表中的每一行,则该列称为主键。个值都是唯一的,当查询时使用主键索引,他还允许对数据的快速访问。
聚集索引():表中行的物理顺序和表中的逻辑顺序相同。一个标志能有一个聚集索引。
如果一个索引不是聚集索引,则表中的数据的物理顺序和表中的逻辑顺序不相同。
『叁』 数据库索引的底层实现是什么数据结构
关于数据库索引的数据结构,大多数数据库都是采用B树。可参照文章:
http://blog.csdn.net/Ant_Yan/archive/2008/09/15/2932068.aspx
非主键索引需要在数据表本身的存储空间外额外开销存储空间,所以在更新的时候可能不仅要更新数据表本身,还要更新非主键索引,更新内容更多了,所以导致速度降低。反过来,如果数据表中的数据按照主键索引的顺序存储,更新的时候就没有额外的开销。
非主键索引对提高查询速度来讲,主要的方面是:检索的条件(where...)如果命中对应的非主键索引的话,就不需要对数据表做全表扫描,效率肯定是大大提高。(索引的创建和使用是数据库设计和优凳租租化的重要部分,是一型漏个数据库程序员的必修课,不同数据库系统的语法不同,但是原理基本相同);
另一方面,也有如下的可能:如果检索枣兆结果的字段包含在非主键索引中,即使对非主键索引做全扫描,也比对整表字段做全扫描快,因为只有非主键索引本身的数据需要从存储设备调入内存,节约了IO时间。
不过一般说索引对查询速度的影响,主要指第一种情况。