MySQL中的索引

一、索引是什么?

索引是帮助MySQL 高效获取信息的数据结构 (有序)。无索引时全表按顺序查找 效率低, 有索引时按照建立的索引来查找 效率高(图书馆书架标识、书本目录),

1.优缺点

优点:
(1)提高了数据检索的效率, 降低了数据库IO成本。
(2)按照索引列排序,降低了数据排序的成本、cpu的消耗。
缺点:
(1)索引列同样要占用空间
(2)索引大大提高了查询效率,但每次修改,插入、删除数据,效率会降低(要修改索引)。

二、索引结构

不同的存储引擎有不同的索引结构,主要的有:B+Tree索引、Hash索引、R-Tree(空间索引)、Full-text(全文索引)。
在MySQL中默认使用InnoDB存储引擎,该存储引擎默认的索引结构是 B+Tree。

1、B+Tree索引 :最常见的索引结构。

2. Hash索引: 底层用哈希表实现,只有精准匹配的列才能检索有效,不支持范围查询

3、R-Tree索引:空间索引是MYISAM一种特殊的索引,主要用于地理空间数据类型,较少使用。

4、Full-text: 是一种通过建立倒排索引,快速匹配文档的方式。

在这里插入图片描述

三、B+Tree索引

为什么选择B+Tree作为索引结构?

1、二叉树
(1)当顺序插入数据时会行形成一条链表,层级深效率低。
(2)每个节点只有两个子节点,当数据量大时,树的层数会变多。

2、红黑树
概念:左孩子节点比父节点小,右孩子节点比父节点大。
虽然解决了顺序插入的问题
但 当数据量大时,层级较深,检索效率低。
3、B-Tree(多路平衡查找树)
以度为 5的树为例,每个节点最多存放4个key,5个指针。
在这里插入图片描述
提示: 当节点中的key数量达到 度数时, 处于中间的key会向上分裂,两边的key会变成它的左右孩子节点,如果它还有父节点,则加入父节点中。

4、B+Tree
所有节点均会出现在叶子节点中且形成单链表(到MySQL中形成双向链表),父节点不存放数据, 只存放key。
在这里插入图片描述
每个节点是在一个页中,一个页默认16KB。
在这里插入图片描述

四、Hash索引

hash索引就是采用hash算法实现的hash表。

hash索引的特点:
(1) 只能用于对等计较(= 、 in), 不能用于范围查询。
(2)无法利用索引完成排序操作,(B+Tree可以利用按索引排序的序列直接返回不用再到内存排序)
(3)查询效率高,通常只需一次查询

在MySQL中, Hash索引支持的是Memory引擎, 而InnoDB有自适应hash功能,根据B+Tree索引在指定条件下自动创建。

五、适合创建索引的情况

(1)在数据量大、使用频繁、用以缩小查询范围的字段创建索引。
(2)在频繁使用、常作为where、order by、 group by 条件的列需要排序的字段上创建索引。
(3)对于长度过长的列可以创建前缀索引。
(4)尽量使用联合索引,单列索引虽然能查找到数据,但仅能返回一列数据,经常需要回表查询(如果不是主键列),且可以减少存储空间,使用联合索引通常可以覆盖索引。
(5)字段重复值多(区分度低),的列不适应创建索引。
(6)不适合创建过多的索引,索引也需要占空间,同时需要维护索引,影响更改效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值