【面试准备】1、MySQL索引篇

  • 引言:
  • 什么是索引?
  • MySQL索引的结构有那些?并简单的介绍。
  • B+tree在innodb与myisam存储引擎中有何区别?
    • 为什么b+tree在innodb为存储引擎时,索引为非ID主键时数据位存储的是行数据主键而不是行数据?
    • 为什么innodb表必须有主键,并且推荐使用*整型*的*自增*主键?
  • 哪些需要创建索引?

引言:

疫情结束自己准备也要面试找工作了,于是浏览了不少招聘的职位简介,和自己所掌握的职业技能一对比后,心里暗叫:不妙呀!很多技术自己还是半灌水啊,被面试官一问不就是露馅了吗。不如趁这个时期在家好好把遗忘的复习复习,不会的好好去研究研究。
博客也荒废了快半年,顺便督促自己好好记录下学习的过程和成果。
hold!hold!心里戏也是十足,还是回归正题了,毕竟MySQL性能调优中索引相关的问题在面试中是个常问的问题。

什么是索引?

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 我们可以简单理解为:索引本质是一种数据结构,其作用是帮助MySQL快速检索。

MySQL索引的结构有那些?并简单的介绍。

  • B+tree索引(MySQL默认使用该结构)

特点:

  • 由Btree演变,索引在非叶子节点和叶子节点中会有冗余,非叶子节点只存储索引(这也是一个节点可以存储更多索引的原因,查找次数更少),叶子节点存储索引和数据
  • 也遵循二叉树的排序规则,左节点索引小于父节点索引,右节点大于父节点
  • 节点从左到右呈升序排序
  • 叶子节点之间有指针连接,提高区间访问性能(这也是b+tree支持范围查询和排序原因之一)
  • hash索引

特点:
查询快速,时间复杂度为O(1)
不支持范围查询和排序

B+tree在innodb与myisam存储引擎中有何区别?

innodb myisam
文件格式 索引和数据存储在ibd文件 索引存储在myi文件
索引结构 ID为主键时:叶子节点上数据位存储是行数据,非ID为主键时:数据位储存的是行数据主键 叶子节点上数据位上储存是数据的地址
事务 支持事务 不支持事务
行级锁定、表级锁定 表级锁定
外键 支持 不支持
可移植性、备份及恢复 灾难恢复性好 并发性差;主机宕机后,MyISAM表易损坏,灾难恢复性不佳

为什么b+tree在innodb为存储引擎时,索引为非ID主键时数据位存储的是行数据主键而不是行数据?

存储引擎是基于表的不是基于数据库的
保持数据的一致性,减少冗余和存储空间。

为什么innodb表必须有主键,并且推荐使用整型自增主键?

  • 当用于没有声明主键时,MySQL会默认自动在表中增加隐藏字段用于主键储存
  • 整型较于其他数据类型所占空间更少,单节点能储存更多索引
  • 自增主键时,在插入数据时会依次插入到B+tree叶子节点后面;反之插入时会破坏之前的节点,有一个b+tree平衡的过程,降低了插入数据的性能

哪些需要创建索引?

索引虽然能非常高效的提高查询速度,同时却会降低更新表的速度。实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。

下面图片感觉归纳的不错,从别人引用过来的

个人浅见欢迎大拿指导
向上的路并不拥挤,而大多数人选择了安逸——@fengziy

【面试准备】MySQL索引篇相关推荐

  1. mysql为什么用b加树_为什么MySQL要用B+树?聊聊B+树与硬盘的前世今生【宇哥带你玩转MySQL 索引篇(二)】...

    为什么MySQL要用B+树?聊聊B+树与硬盘的前世今生 在上一节,我们聊到数据库为了让我们的查询加速,通过索引方式对数据进行冗余并排序,这样我们在使用时就可以在排好序的数据里进行快速的二分查找,使得查 ...

  2. mysql索引篇之覆盖索引、联合索引、索引下推

    覆盖索引 在之前<mysql索引初识>这篇文章中提到过,mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即 ...

  3. 刨根问底:MySQL索引篇之千万级数据实战测试

    今天中午我这边只有半个小时时间,再过半个小时,得带着孩子去我妈那吃饭,就拿我给学生讲的案例,给大家直入主题讲一下吧- MySQL索引创建 先说明一个问题啊,如果你创建数据表时创建了主键,此时主键列会自 ...

  4. mysql第四项_mysql数据库的基本介绍与操作(第四篇-mysql索引篇)

    索引概述: 索引(也就是mysql中常说的键值key)是存储引擎用户快速找到记录的一种数据结构,这是索引的基本功能,索引对于良好的性能非常关键,尤其是当表中数据量 越来越大的时候,索引对性能的影响就越 ...

  5. mysql 如何添加索引_MySQL如何创建一个好索引?创建索引的5条建议【宇哥带你玩转MySQL 索引篇(三)】...

    MySQL如何创建一个好索引?创建索引的5条建议 过滤效率高的放前面 对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样.查询时,如果第一列能够排除的越多,那么后面列需 ...

  6. 字节跳动高工面试:mysql索引视频教程

    一.什么是ZooKeeper ZooKeeper是一个分布式服务协调框架,提供了分布式数据一致性的解决方案,基于ZooKeeper的数据结构,Watcher,选举机制等特点,可以实现数据的发布/订阅, ...

  7. MySQL - 索引下推 Index Condition Pushdown 初探

    文章目录 生猛干货 Pre ICP 索引下推的含义 范围查找为啥不行? 搞定MySQL 生猛干货 带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试 Pre MySQL - 索 ...

  8. 面试官让我讲讲MySQL(索引篇)

    面试官让我讲讲MySQL(索引篇) 文章目录 面试官让我讲讲MySQL(索引篇) 1.请你说下你对MySQL架构的理解? 2.请你说下你对索引的理解? 3.那那那索引底层数据结构是什么呢? 4.那既然 ...

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

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

最新文章

  1. VS2017中运行第一个C#控制台应用并输出HelloWorld
  2. PHP获取客户端、PHP获取服务器相关信息
  3. jaxb 映射 空字段_JAXB和未映射的属性
  4. Mybatis判断int类型是否为空
  5. SCI论文全攻略:选刊\投稿\修回与退稿
  6. 十年无果,Linux 开发者放弃 VMware 诉讼
  7. java生成随机名字
  8. mac u盘重装系统(monterey)
  9. 神舟K650D-G4D2安装ubuntu18.04出现的[Firmware Bug]
  10. 2022-2028年中国高尔夫行业市场现状分析及投资前景评估报告
  11. 研发大局观(15.8.25 )
  12. 推荐 4 款超好用的内网穿透工具,总有一款适合你
  13. 海兰一体计算机配置,新一代办公神器!海兰一体机G40 plus为何受职场人士追捧?...
  14. ATTCK v10版本战术介绍—资源开发
  15. 第2次实验——算法基本功 与 综合思考
  16. cannot simultaneously fetch multiple bags 的解决方法
  17. 一元风暴时买的域名,拿出来晒晒
  18. Downie 4 4.6.14 MAC上最新最好用的一款视频下载工具
  19. 求圆心角的度数c语言程序,圆心角度数怎么求
  20. 1.Node.js 接入微信公众平台开发

热门文章

  1. 数据安全运营体系建设
  2. 调试SI4432要点
  3. 915M无线通讯模块 数传 SI4463 SX1278
  4. jquery各种插件库
  5. Bluesky勒索软件深度技术分析
  6. [UE4]打包运行时提示Plugin ‘‘ failed to load because module ‘‘ could not be found.缺少插件解决方法
  7. Alarm机制-学习记录
  8. 帝国cms 留言反馈 问题
  9. java毕业设计——基于java+Java awt+swing的愤怒的小鸟游戏设计与实现(毕业论文+程序源码)——愤怒的小鸟游戏
  10. python画八角星_Goc-N角星的绘制