一、啥是索引
一种高效获取数据的数据结构。通俗的说,数据库索引像一本书的目录,能加快数据的查询速度

一般来说索引本身很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。

通常所说的索引,包括聚集索引、组合索引、唯一索引等等,默认都是使用 B+ 树结构组织的。

二、索引有啥优点和缺点
优点:
提高数据检索的效率,降低数据库的 IO 成本。
通过索引列对数据进行排序,降低了数据排序成本,降低 CPU 消耗。
(1)被索引的列会自动进行排序,包括单列索引和组合索引。
(2)如果按照索引列的顺序进行排序,比如对 order by 等语句来说,效率会提高。

缺点:
索引是占磁盘空间的,同时会降低更新表的效率。因为每次增删改操作,MySQL不仅要保存数据,还需要保存或者更新对应的索引文件。

三、常见的索引种类
主键索引
索引列中的值必须唯一,不允许有NULL。

普通索引
没有什么限制,允许在索引列中插入重复值和空值NULL。

唯一索引
索引列中的值必须唯一,但是允许为空值NULL。
(ps:其与主键索引区别:主键索引一定是唯一索引,但犯过老不行;一个表只能有一个主键索引,但可以有多个唯一索引;主键索引不允许为空,唯一索引可以;主键索引可以作为外键,唯一索引不行)

全文索引
只能在文本类型 CHAR,VARCHAR,TEXT 类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,在进行 like 模糊查询时效率比较低,这时可以创建全文索引。MyISAM 和 InnoDB 中都可以使用全文索引。

联合索引
两个或多个列上的索引被称作联合索引,又叫复合索引。Mysql 从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分,即其需要遵循最左前缀匹配原则。比如你创建了三个字段的 idx_abc(a,b,c) 联合索引,相当于创建了(a)、(a,b)(a,b,c)三个索引,但是不支持使用(b,c)进行查找。
(ps:联合索引创建原则:把频繁使用的列、区分度高的列放在前面;当前索引频繁使用作为返回字段,这时可以考虑当前列是否可以加入到已经存在索引上构成联合索引,使其查询语句可以用到覆盖索引。)

四、Mysql 的 InnoDB 引擎的索引
1、主键索引(聚簇索引)
每个 InnoDB 表都有一个聚簇索引 ,聚簇索引使用 B+ 树构建,叶子节点存储的数据是整行记录,找到叶子节点也就找到了数据。一般情况下,聚簇索引等同于主键索引,当一个表没有创建主键索引时,InnoDB会自动创建一个 ROWID 字段来构建聚簇索引。InnoDB 创建索引的具体规则如下:

  • 在表上定义主键 PRIMARY KEY,InnoDB 将主键索引用作聚簇索引
  • 如果表没有定义主键,InnoDB 会选择第一个不为 NULL 的唯一索引列用作聚簇索引
  • 以上两个都没有,InnoDB 会使用一个 6 字节长整型的隐式字段 ROWID 字段构建聚簇索引。该 ROWID 字段会在插入新行时自动递增


 
2、辅助索引
除聚簇索引之外的索引都是辅助索引。InnoDB 中辅助索引树中的叶子节点存储的是该行的主键值而不是整行记录。
在使用辅助索引检索时,会先在辅助索引树找到主键值,然后根据这个主键值再在聚簇索引(主键索引树)中搜索具体的行数据。这个过程叫回表

五、Mysql 的 MyISAM 引擎的索引
1、主键索引(非聚簇索引)
MyISAM 的数据文件和索引文件是分开存储的。其也使用 B+ 树构建索引树,但叶子节点中存储的是该行记录在磁盘中的地址。(也就是说找到叶子节点后还需要再从对应的地址中获取你想要的数据,而不是像聚簇索引那样直接就能获取到对应的数据)

 
2、辅助索引
MyISAM 的辅助索引和主键索引结构上没有什么区别,叶子节点存储的都是行记录的磁盘地址。只是主键索引的键值是唯一的,而辅助索引的键值允许重复。

六、啥是覆盖索引
覆盖索引并不是一种索引结构,它是一种常用的优化手段。我们知道,使用辅助索引时,只能先拿到主键值,然后再根据主键查询主键索引树获取到记录。但是有这样一种情况,假设有个 user 表,其 id 为主键,我们把 name 和 sex 两个字段建立了组合索引,然后有这样一个查询(select id,name,sex from user where name =‘zhangsan’)时,是不是意味着查询到组合索引的叶子节点后就可以获得了该语句要查的完整数据,然后就可以直接返回了,从而就没有了回表操作。这种情况即为覆盖索引。

怎么判断是不是用到了覆盖索引?
使用 explain,通过输出的 extra 列来判断,如果用到了索引覆盖查询,显示为 using index。

大佬,点个赞在走呗!
 
 
 
 
 
 

Mysql面试之索引相关推荐

  1. MySQL面试:索引为啥使用B+树而不是B树

    索引的本质 数据库索引,就是数据库管理系统(DBMS)中一个排序的数据结构,用以协助快速查询,更新数据库表中数据 首先数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址.如果没有索引的话, ...

  2. MySQL面试精选-索引

    目录 1.什么是索引 2.索引的优缺点 2.1 优点 2.2 缺点 3.索引的作用 4.什么情况下需要建索引

  3. PHP面试MySQL数据库的索引

    你好,是我琉忆,PHP程序员面试笔试系列图书的作者. 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识 周三:PHP面试MySQL数据库的索引 周五 ...

  4. 面试mysql中怎么创建索引_阿里面试:MySQL如何设计索引更高效?

    有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...

  5. PHP面试 MySQL创建高性能索引考点

    MySQL索引 MySQL索引的基础和类型 索引的基础:索引类似于书籍的目录,要想找到一本书的某个特定篇章,需要查找书的目录,定位对应的页码 存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的 ...

  6. 的列数 获取mysql_阿里面试:MySQL如何设计索引更高效?

    有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...

  7. MySQL索引的理解学习,面试不问索引原理就是事务原理

    目录 MySQL执行SQL的整体流程 引言, MySQL索引底层学习原因 磁盘介绍(理解磁盘IO) 索引底层数据结构B+树 B+树(聚集索引) B+树(辅助索引) 思考一下为何使用B+树结构, 不是B ...

  8. mysql中组合索引创建的原则是什么意思_面试前必须要掌握的MySQL索引最左前缀匹配原则...

    在面试中,经常会遇到这种问题,如果我们设置联合索引的顺序是(a, b, c), 那么如果我们在查询时的顺序却是(a, c, b) 会走索引吗?这个问题被问到的频率之高,令人乍舌,在这篇文章中,我们就深 ...

  9. mysql面试 索引类型_面试题目整理(MySQL系列-索引)

    最近又开始面试了,整理一些面试的高频考点吧.有幸参与一次社招面试,看的还是底层知识: 1.数据库存储引擎分类: (1):存储引擎主要有: 1. MyISAM(不支持事务) , 2. InnoDB(支持 ...

最新文章

  1. php error_reporting 详解
  2. 奥巴马表示10天内债务谈判出结果 债务违约可能性底
  3. php开发 linux作用是什么,linux有什么用?
  4. pywebQQ-----linux下webQQ的替换者
  5. java 命令直接执行(运行)jar 包的几种方法【笔记自用】
  6. 快手二面:引入RabbitMQ后,你如何保证全链路数据100%不丢失?
  7. 爬虫 spider05——使用httpclient发送get请求、post请求
  8. 磁盘分区原理:从MBR到GPT
  9. 利用Arthas排查NoSuchMethodError
  10. 矢量合成和分解的法则_力的合成与分解
  11. 【计算机网络】为什么一个路由器会有两个wifi信号
  12. 腾讯云发布第三代云服务器矩阵,开放更强计算力赋能产业智能化
  13. Elasticsearch--分词-自定义扩展词库---全文检索引擎ElasticSearch工作笔记022
  14. poj--3984--迷宫问题(bfs+路径记录)
  15. 用C#语言在VS2010 WPF中编写的选择文件和选择文件夹的问题及其解决方案
  16. Java实现文件批量重命名
  17. 怎么让百度收录站点的图片呢?
  18. 《SAP从入门到精通》——1.2 SAP系统实施思想
  19. Python正则表达式(附语法详解)
  20. javascript总复习

热门文章

  1. Python习题十一
  2. (二)操作系统的发展与分类
  3. revi怎么弄插件能够使附件发生一定角度的旋转?
  4. java erc 2.0_如何使用java监听Erc20Token交易
  5. 【华人学者风采】张瑞 新加坡国立大学
  6. 数据结构大作业-DBLP科学文献管理系统(一) XML解析,文件哈希,C++线程
  7. 时代中国三年“老去” 岑钊雄500强空梦一场
  8. 小豆苗与妈咪知道发布战略合作,打造母婴健康服务新生态
  9. android p三星,索尼XZ3新机采用Android P系统,对标三星note9,网友:外观
  10. 国内期刊投稿用 CTeX(CTeX_2.9.2.164_Full)