索引对数据库有多重要,我想大家都已经知道了吧,关于索引可能大家会对它多少有一些误解,首先索引是一种数据结构,并且索引不是越多越好。合理的索引可以提高存储引擎对数据的查询效率。

形象一点来说呢,索引跟书本的目录一样,能否快速的查找到你需要的信息,取决于你设计的目录是否合理。

MySQL 数据库有很多种索引,每种存储引擎的索引都不太一样,这篇文章就介绍一下 InnoDB 引擎种的索引,在 InnoDB 引擎中有三种索引:

  • B-Tree 索引
  • 哈希索引
  • 全文索引

B-Tree 索引

B-Tree 索引是 InnoDB 引擎的默认索引,如果我们没有特别指定索引,那么说的就是 B-Tree 索引。在 InnoDB 引擎中使用 B+树来实现 B-Tree 索引,关于 B+树的知识就百度吧,我也讲不清楚。

在 B-Tree 索引中又有主键索引和普通索引之分,分别来了解一下:

1、主键索引

主键索引也叫聚集索引,是按照主键构建得一棵 B+树,只要建立了主键就会自动加上索引,主键索引得特点是:叶子节点上存放着整张表得行记录数据,所以叶子节点也叫数据页

正是因为这个特点,对于主键的排序查找和范围查找速度非常快,因为索引上就有用户需要查询的数据,所以不会要回表查询,这样就加快了查询速度,关于什么是回表,普通索引的时候再聊一聊。

2、普通索引

普通索引也叫二级索引,跟主键索引的主要区别在于叶子结点没有存放行记录的全部数据,只包含了需要的键值,还有一个标签,用来告诉存储引擎在哪里可以找到这行数据。

举个例子,让我们刚好的理解普通索引,如下面这张表:

mysql> create table T(
id int primary key,
k int not null,
name varchar(16),
index (k)) engine=InnoDB;

K 索引就是普通索引,除了主键之外的索引都是普通索引。

普通索引因为行记录里没有数据的全部信息,在使用普通索引查询时,需要现在普通索引树上搜索一遍,再回到主键索引树上查询到需要的信息,这个过程也叫回表

可能回表不太好理解,我引用极客时间《MySQL实战45讲》里面的例子,先看下面这张图:

左边的是主键索引树,右边的是 K 索引树,假设我们现在要执行select * from T where k=5 语句,即普通索引查询方式,则需要先搜索 k 索引树,得到 K=5 对应的 ID 值为 500,再到 ID 索引树搜索一次,这个过程称为回表。

哈希索引

哈希索引在 InnoDB 引擎中叫作自适应哈希索引,它是由数据库自身根据你的使用情况创建的,并不能认为的干预,所以叫作自适应哈希索引,采用的是哈希表数据结构,所以对于字典类型查询就非常的快,但是对于范围查询就无能为力啦。

全文索引

在 B-Tree索引中,当我们执行 select * from blog where content like %xxxx% 语句时,索引会失效。全文索引可以有效的解决这种语句查询。

全文索引是一种比较特殊的索引,一般都是基于倒排索引来实现的,es 也是使用倒排索引。倒排索引跟 B-Tree 索引一样也是一种数据结构,在辅助表中存储了单词与单词自身在一个或多个文档中所在位置的映射。

现在有很多专门做全文索引的软件,例如 solr、elasticsearch等,MySQL 中的全文索引实现原理跟这些差不多。

以上就是关于 InnoDB 引擎中的索引类型,感谢您的阅读,希望这篇文章对您的学习或者工作有所帮助。

最后

目前互联网上很多大佬都有 MySQL 相关文章,如有雷同,请多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有所错误之处,还望提出,谢谢。

欢迎扫码关注微信公众号:「平头哥的技术博文」,和平头哥一起学习,一起进步。

聊一聊 InnoDB 引擎中的索引类型相关推荐

  1. InnoDB中的索引类型

    InnoDB数据引擎使用B+树构造索引结构,其中的索引类型依据参与检索的字段不同可以分为主索引和非主索引:依据B+树叶子节点上真实数据的组织情况又可以分为聚族索引和非聚族索引.每一个索引B+树结构都会 ...

  2. mysql5.5索引如何定义_MySQL5.5索引数在InnoDB引擎内与索引数在mysql中定义的数量是不一致问题-阿里云开发者社区...

    在查看MySQL错误日志的时候发现这样的错误,如下: 160322 21:42:59 [ERROR] Table baby/baby_order contains 12 indexes inside ...

  3. 为什么 select count(*) from t,在 InnoDB 引擎中比 MyISAM 慢?

    统计一张表的总数量,是我们开发中常有的业务需求,通常情况下,我们都是使用 select count(*) from t SQL 语句来完成.随着业务数据的增加,你会发现这条语句执行的速度越来越慢,为什 ...

  4. mysql vpformysql引擎_MySQL InnoDB引擎B+树索引简单整理说明

    本文出处:http://www.cnblogs.com/wy123/p/7211742.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  5. Mysql (InnoDB引擎)聚集索引和辅助索引

    聚集索引: InnoDB存储引擎表是索引组织表,即按照主键的顺序存储数据.  聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,树中的叶子节点存放着表中的行记录数据,因此, ...

  6. mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引

    MySQL的InnoDB索引结构采用B+树,B+树什么概念呢,二叉树大家都知道,我们都清楚随着叶子结点的不断增加,二叉树的高度不断增加,查找某一个节点耗时就会增加,性能就会不断降低,B+树就是解决这个 ...

  7. Innodb引擎中B+树一般有几层?能容纳多少数据量?

    参考: 面试题:InnoDB中B+树有几层?_Running-Waiting的博客-CSDN博客_b+树有几层 mysql单表最多两千万条数据? 先说结论:一般B+树高大约为1~3层(通过主键索引查询 ...

  8. (读书笔记)关于InnoDB引擎中的一致性锁定读

    我们上篇主要讲到,在默认配置下,即事务的隔离级别为 REPEATABLE READ模式下,InnoDB 存储引擎的select操作使用一致性非锁定读 但是在某些情况下,用户需要显式地对数据库读取操作进 ...

  9. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

最新文章

  1. vector机器人 VECTOR’S CUBE 矢量的立方体
  2. JS的数据访问及优化访问速度
  3. C/C++语言void及void指针深层探索 .
  4. 【转载】如何清晰地表达信息
  5. teams怎么去看谁在说话
  6. 最大子序列和问题 hdu1231
  7. Easy Tech:什么是MPEG-DASH协议
  8. keras训练完以后怎么预测_农村小孩只有户口,没有承包地,以后怎么养老?看完我安心了...
  9. 记一次面试过程中的Python编程题
  10. JS与Jquery的事件委托机制
  11. Python 各种报错解释及处理方法
  12. 腾讯接入支付宝 京东、苏宁易购在等是什么
  13. 管理与发展模式才是联想的症结
  14. 懒人精灵新版图色工具介绍
  15. 使用STVP 下载STM32程序之后,弹出 Problem while trying to Run core of device. 的解决办法
  16. xlsx模块 前端_React读取Excel——js-xlsx 插件的使用
  17. php极光推送获取cid返回404错误,极光推送心得
  18. NOIp 2020 微信步数 题解
  19. GTA5美化MOD了,这套MOD真的绝了……?
  20. mysql 烂泥_烂泥:mysql帮助命令使用说明

热门文章

  1. 手机客户端访问本机计算机局域网服务器
  2. r spgm 语言_R语言 splm包 spml()函数中文帮助文档(中英文对照)
  3. SecureCRT自动打印日志
  4. etcd-集群部署,基于ssl认证的节点间通信,客户端基于ssl客户端证书访问。
  5. vue-amap添加某个省市县区的边界线,添加某个省市县区的行政区划
  6. 齐次线性方程-基础解系与解向量的关系
  7. 求正多边形的面积JAVA_计算正多边形的面积 Gym - 101840G
  8. lammps代码实例分享
  9. 首席工程师揭秘:LinkedIn大数据后台是如何运作的
  10. 手撕TreeMap红黑树