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

·主键索引: 数据列不允许重复,不允许为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+树的叶子节点形成有序链表,可以更快地进行范围查询操作。但是对于单个键值的查找,两种树结构的时间复杂度是相同的。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值