MySQL索引认知-2

本文详细介绍了MySQL索引的分类,包括聚簇索引、联合索引、唯一索引和普通索引,并探讨了全文索引。文章还讨论了不同类型的索引创建方法,强调了B+Tree作为默认索引数据结构的优势。此外,文章分析了InnoDB和MyISAM存储引擎的索引实现差异,以及索引的优缺点,最后提出了索引设计和优化的建议。
摘要由CSDN通过智能技术生成

前言

前面啰嗦了一大堆,也没有正式的开始介绍索引,下面我们开始索引的真正学习,上文说到了索引的主要目的是为了加速查询存在的,以及InnDB的数据页结构,下面我们具体来分析下索引都哪些特点,具体数据是怎么存储的。

索引的分类

  • 聚簇索引

    聚集索引就是叶子节点的顺序和物理存储的顺序是一样的,所以范围查找的时候效率很高,但是DML操作的时候,为了维护物理存储的顺序和叶子节点一样,涉及到大量的数据位移调整

    InnoDB中指的就是主键索引

  • 联合索引

    多个 列组合在一起,专门用于组合搜索,效率高于索引的合并(多个单列索引组合搜索)

  • 唯一索引

    加速查询,列值是唯一

  • 普通索引

    就是指普通的字段,仅仅能加速查询

  • 全文索引

    一般情况下很少用,主要用于查找文本中的关键字,InnoDB 从5.6版本已经开始支持。(不够友好,默认不支持中文,日文,需要其他的插件辅助)互联网应用倾向于用其他的方案解决如Es(主要是字符的文本进行截取,分词)

常用创建索引的方法

MySQL目前主要支持 FULLTEXT,HASH,BTREE,RTREE.

MySql索引的数据结构选型,InnoDB默认采用B+Tree作为索引的数据结构

  • FULLTEXT针对较大的数据,只有文本类型的字段可以创建索引,比如char/varchar/text;这个索引并不是

  • Hash 时间复杂度为O(1),基于hash表来实现,不支持范围查找。只针对精确匹配索引的所有列的查询才会生效,针对每一行的数据,存储引擎都会对所有的索引列计算一个hash code,并将hash code存储在索引中,指针指向数据行指针。(另外InnoDB引擎中有一个特殊的功能叫做自适应哈希索引,当InnoDB发现某些做索引值被使用的非常频繁的时候,会基于B-Tree索引的基础上再创建一个hash索引,这样可以利用一些hash索引的遍历。加快索引数据的查找)

  • B-Tree 索引是MySQL数据库中使用最频繁的索引,除了Archive存储引擎外其他的所有存储引擎都支持B-Tree索引,实际上在很多其他的数据库管理系统中B-Tree 索引也是最重要的索引,主要是因为B-Tree 索引的数据结构在数据检索中表现非常优异。

    • 一般来说B-Tree 索引的物理文件是以平衡树的结构来存储的,也就是所有的实际需要的数据都存放于树的结点,一个树节点可以存多个数据。

    • 相对于普通的二叉树索引,由于一个树的节点,可以保存多个数据,缩小了树的深度。B-Tree的平衡是通过向下分裂来实现,避免查找的时候会退化成链表进行查找,增加查找的时间复杂度。

    • MySQL 数据库中,BTreeMyISAM数据引擎在使用。

  • B+TreeB-Tree 的变种,所有的数据都存储在叶子节点上,并且增加了顺序访问的指针,每个叶子节点的指针指向相邻的叶子节点的地址。相对B-Tree来说,进行范围查找两个节点,进行遍历既可,相对而言,B-Tree</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值