当前位置:   article > 正文

数据库的索引类型有哪四种?索引的数据结构有哪两个?_数据库索引有哪几种类型

数据库索引有哪几种类型

·主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。

·唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引

可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引

可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索引

·普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。

可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引

可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引

·全文索引: 是目前搜索引擎使用的一种关键技术。

可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引

参考原文链接:数据库的索引详解_数据库索引-CSDN博客

索引的数据结构有:在MySQL中使用较多的索引有B+树索引,Hash索引等。

【注意:MySQL数据库默认使用B+树索引,而不用哈希索引。】

1.MySQL官方对索引的定义为:索引 (Index)是帮助MySQL高效获取数据的有序的数据结构。

查询是数据库最主要的功能之一,我们都希望查询的速度尽可能快。

优化:查询算法、查找。

索引类似新华字典里的“拼音索引”和“部首索引”。

2.索引是如何设计的?

索引数据结构包括:顺序查找O(n)、二分查找O(logn)、二叉树查找(二叉树相当于红黑树)、哈希O(1)、B树、B+树。

数据库中假如你给某一列添加了索引,则它默认使用的索引是B+。(数据库索引设计的就两个:哈希用的少,B+树为主。)

·为什么数据库不设计顺序查找的索引结构?

答:第一,数据在磁盘上存储是不连续的,而索引在物理上是连续的,即:当我们要给磁盘上新增加一条数据时,会造成连续的索引移动起来很困难。

第二,索引在物理上是连续的(顺序的),所以要在磁盘上找一块很大的连续的空间来存储索引,这就不太好。

·为什么数据库不设计红黑树(或二叉树)的索引结构?

索引是存在磁盘里的,不像内存,内存用红黑树去管理物理页是因为内存的访问效率很高。对于索引,当数据量很大时(几百万条),磁盘寻道时间长,要logn次磁盘寻道操作,读磁盘的性能太低。

·为什么数据库很少设计用哈希的索引结构?(虽然数据库支持哈希索引,但默认还是用B+树索引)

因为哈希表本身就是由数组实现的,需要一个很大的连续的磁盘空间,每一个哈希表中的位置存的都是数据实际的磁盘地址。即:磁盘是以block512个字节进行管理的,磁盘碎片化比较严重,在磁盘上找一个很大的连续空间本来就不容易。

·对于B树:(B+树是B树的升级版)

假如有100万条数据要存,使用B树(多叉树)每个节点存1000条数据,分1000个叉,

1000*1000*1000=100万条。所以,磁盘索引的寻道次数就很少。

B树存3个东西:如ID值=5、data地址、下一个节点的地址。

B树的插入示意图:【假设最大节点度数设置为3,当前叶子节点度数达到3就平均分裂为两个节点,变为中间数节点、左小、右大,分割值上提插入到父节点中。】

B+树和B树的改进:

【相对于B树来说,相同空间,一个节点可以存的ID值的节点是更多的,那这样的话,它整体的树的高度就降低了。它都把它存到叶子。】

答:B+树相对于B树在存储数据方面做了以下改进:

1.更大的节点容量: B+树的节点相比于B树节点可以容纳更多的键值对。这意味着在相同的高度下,B+树可以存储更多的数据。

2.只存储数据的叶子节点: 在B+树中,只有叶子节点存储实际的数据,而非叶子节点只存储键值信息。相比之下,B树的所有节点都可以存储数据。这种改进使得B+树的叶子节点形成一个有序链表,便于范围查询和顺序遍历。

3.更好的磁盘读写特性: 由于B+树的内部节点只存储键值信息,相比于B树,它可以容纳更多的键值信息,减少了磁盘访问次数。这对于磁盘IO密集型的应用程序来说,可以提高存储和检索效率。

4.更低的树高度: 由于B+树的节点容量更大,相同数量的数据可以被存储在更少的层级中。这意味着在查找数据时,B+树需要更少的磁盘访问次数,从而减少了查询时间。

5.支持更高效的范围查询: B+树的叶子节点形成一个有序链表,这使得范围查询变得更加高效。通过遍历链表,可以快速获取一个范围内的数据。

B树和B+树在查找数据时的时间复杂度都是O(log n),其中n表示树中的节点数。

需要注意的是,B+树相较于B树在范围查询方面具有更好的性能,因为B+树的叶子节点形成有序链表,可以更快地进行范围查询操作。但是对于单个键值的查找,两种树结构的时间复杂度是相同的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/630393
推荐阅读
相关标签
  

闽ICP备14008679号