索引的底层原理是什么?它有什么优点和缺点?

TheDisguiser 2020-05-06 18:24:16 java常见问答 7294

数据库中有着索引这么一个存储结构,可以帮助我们优化SQL查询语句,更快的找到想要的数据,本文小编就带你们了解一下数据库索引的实现原理,一起来看看吧。

什么是索引?

索引,是数据库中一个排序的数据结构,用来协助快速查询、更新数据库中表数据。索引的实现一般会使用B树及其变种B+树。

在数据之外,数据库还维护着满足特定查找算法的数据结构,这些数据结构会以某种方式寻找数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就叫索引。

设置索引是需要付出代价的:索引会增加数据库的存储空间,索引在插入与修改数据时花费时间会多很多。

索引的底层原理

这里展示了一种可能的索引方式。左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在O(log2n)的复杂度内获取到相应数据。

索引优点

1.索引可以大大提高系统的性能。

2.创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

3.索引可以极大的加快数据检索速度

4.索引可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

5.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

索引缺点

1.索引的创建与维护索引要耗费不少时间,这种时间还会随着数据量的增加而增加。

2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

唯一索引

唯一索引是不允许其中任何两行具有相同索引值的索引。

当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。聚集索引在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

以上就是本文的全部内容了,更多java常见问答请关注我们的网站了解吧。