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

文章目录

  • 面试官让我讲讲MySQL(索引篇)
    • 1、请你说下你对MySQL架构的理解?
    • 2、请你说下你对索引的理解?
    • 3、那那那索引底层数据结构是什么呢?
    • 4、那既然你说到B+树了,说下你对B+树的理解?
    • 5、看你对B+树很了解,那为什么InnoDB存储引擎不用B树当作索引呢?
    • 6、不错不错,对底层有了解,来说下有哪些索引,简述下
    • 7、那这些索引怎么实现出来的呢
    • 8、建立索引是为了提高效率,现在有一个sql执行的很慢,你来分析一下
    • 9、这说了一条sql执行执行很慢了,你再来说下查询性能的优化方法
    • 10、最后一个问题,InnoDB和MyISAM的区别是什么

1、请你说下你对MySQL架构的理解?

  1. MySQL可以分为Server层存储引擎两个部分。
  2. Server层包括:连接器、查询缓存、分析器、优化器、执行器等,覆盖了MySQL大多数核心服务功能和所有内置函数(如:日期、时间和数学等),所有到存储引擎的功能都在这一层实现(如:存储过程、触发器、视图等)。
  3. 存储引擎负责数据的存储和提取,架构是插件式,支持InnoDB、MyISAM等。MySQL5.5.5版本开始默认为InnoDB,建表可以指定存储引擎(如:engine = MyISAM),不同存储引擎的表数据存取方式不同,支持的功能不同,但是共用一个Server层。

2、请你说下你对索引的理解?

  1. 建立索引的优点和缺点?
  • 优点:提高数据的查询效率
  • 缺点:索引占用物理空间,创建索引、维护索引要耗费时间,对表进行增删改,索引要动态维护,降低了数据的维护速度。

​ 2.建立索引的规则是什么?

  • 适合建索引的情况:
  • 1.在最频繁使用的、用以缩小查询范围的字段上建立索引
  • 2.在频繁使用的、需要排序的字段上建立索引
  • 不适合建立索引的情况:
  • 1.查询中很少涉及的列或者重复值比较多的列,不建立索引
  • 2.特殊的数据类型,不建立索引(如:文本字段text 等)

3、那那那索引底层数据结构是什么呢?

使用较多的索引有Hash索引、B+树索引等

InnoDB默认是B+树索引

4、那既然你说到B+树了,说下你对B+树的理解?

  1. 结构:B+树是基于B树和叶子节点顺序访问指针实现的,它有B树的平衡性,通过顺序访问指针提高区间查询性能
  2. 性质:B+树中,一个节点中key从左到右非递减排列
  3. 查找操作:首先根节点进行二分找到key所在的指针,然后递归在指针所指向的节点进行查找,一直查找到叶子节点,最后在叶子节点进行二分查找,找出key对应的data值。
  4. 插入、删除操作:会破坏平衡树的平衡性,所以在插入删除操作之后,需要对树进行分裂、合并、旋转等操作来维护平衡性。

5、看你对B+树很了解,那为什么InnoDB存储引擎不用B树当作索引呢?

IO对性能的影响:查找相同数据量,B树的高度更高,IO更频繁

  • B树的每个节点都存储数据
  • B+树只有叶子节点存储数据

数据库索引存储在磁盘上:数据量大时,不能把整个索引全部加载到内存,只能逐一加载每一个磁盘页(对应索引树的节点)

6、不错不错,对底层有了解,来说下有哪些索引,简述下

1、普通索引当一张表,把某个列设为主键的时候,则该列就是主键索引

2、唯一索引索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

3、主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。

4、组合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。

5、全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。

7、那这些索引怎么实现出来的呢

InnoDB索引实现(聚集)

  • 数据文件本身就是索引文件
  • 表数据文件本身就是按B+树组织的一个索引结构文件
  • 聚集索引的叶子节点包含了完整的数据记录
  • 表必须有主键,且推荐使用整型的自增主键
  • 普通索引结构叶子节点存储的是主键值

8、建立索引是为了提高效率,现在有一个sql执行的很慢,你来分析一下

1、偶尔很慢,原因如下

  • 数据库再刷新脏页,如redo log写满了需要同步到磁盘上
  • 执行的时候,遇到了锁,如表锁、行锁

2、一直很慢,原因如下

  • 没有用上索引:如该字段没有索引,由于对字段进行运算、函数操作导致无法用到索引
  • 数据库选错索引。

9、这说了一条sql执行执行很慢了,你再来说下查询性能的优化方法

减少请求的数据量

  1. 只返回必要的列:不用select *
  2. 只返回必要的行:用limit语句限制返回的数据
  3. 缓存重复查询的数据:使用缓存可以避免在数据库中进行查询

减少服务器扫描的行数

  1. 使用索引来覆盖查询

10、最后一个问题,InnoDB和MyISAM的区别是什么

  1. 事务:MyISAM不支持事务,InnoDB支持事务
  2. 全文索引:MyISAM支持全文索引,InnoDB5.6之前不支持全文索引
  3. count():MyISAM会直接存储总行数,InnoDB需要按行扫描,对于select count() from table;若数据量大,MyISAM会瞬间返回,InnoDB会一行行扫描
  4. 外键:MyISAM不支持外键,InnoDB支持外键
    noDB需要按行扫描,对于select count() from table;若数据量大,MyISAM会瞬间返回,InnoDB会一行行扫描
  5. 外键:MyISAM不支持外键,InnoDB支持外键
  6. 锁:MyISAM只支持表锁,InnoDB支持行锁

面试官让我讲讲MySQL(索引篇)相关推荐

  1. access建立两个字段唯一索引_面试官:谈谈你对mysql索引的认识?

    引言 这篇我们就来谈谈关于索引方面的mysql面试题.还是老规矩,讲的是在Innodb存储引擎下的情形,毕竟我还真没用过Mysiam之类的存储引擎. ps:其实很早就想写了,一直偷懒! 其实这下面每个 ...

  2. 大厂面试官必问的 MySQL 索引调优等问题,看这篇就够了

    图片来源:pexels.com 孙玄,江湖人称"玄姐",前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何 ...

  3. 联合索引会创建几个索引_面试官:谈谈你对mysql联合索引的认识?

    引言 这篇文章作为<面试官:谈谈你对mysql索引的认识>的续篇,我当时在写这篇的时候,考虑到篇幅问题所以略去了联合索引的内容,今天给大家补上. 本文预计分为两个部分:(1)联合索引部分的 ...

  4. 【面试准备】MySQL索引篇

    [面试准备]1.MySQL索引篇 引言: 什么是索引? MySQL索引的结构有那些?并简单的介绍. B+tree在innodb与myisam存储引擎中有何区别? 为什么b+tree在innodb为存储 ...

  5. 走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

    对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率.大家面试初级.中级或者高级程序员的时候应该大部分 ...

  6. mysql编写完怎么执行_面试官:一条MySQL更新语句是如何执行的?

    在面试中面试中如果被面试官问到在MySQL中一条更新语句是怎么执行的?,下面让我们来探究一下! 流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程 ...

  7. 面试官问:如果MySQL引起CPU消耗过大,你会怎么优化

    转载自  面试官问:如果MySQL引起CPU消耗过大,你会怎么优化 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正在进行大量tps 函数 ...

  8. 面试官让我讲讲Java中的锁,我笑了

    转载自  面试官让我讲讲Java中的锁,我笑了 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁 ...

  9. 事物与持久化_跟面试官侃半小时MySQL事务,说完原子性、一致性、持久性的实现...

    提到MySQL的事物,我相信对MySQL有了解的同学都能聊上几句,无论是面试求职,还是日常开发,MySQL的事务都跟我们息息相关. 而事务的ACID(即原子性Atomicity.一致性Consiste ...

最新文章

  1. php中连接两个值,php - 如何从两个表的连接中选择一个值? - SO中文参考 - www.soinside.com...
  2. rebar Erlang构建工具(转)
  3. PB9.0实现下拉数据列表的实现
  4. lucene 源码分析_Lucene分析过程指南
  5. dubbo-快速入门-分布式RPC框架Apache Dubbo
  6. 机器人坐标系建立_如何在30分钟内建立一个简单的搜索机器人
  7. 否在为一个新品牌或企业寻找设计独特标识的灵感?集设给你灵感
  8. stl Vecotr中遍历方法
  9. flash小黄油安卓_99%安卓被这个小破软件给干了?拥有它!Google直呼内行!
  10. java转化自闭合_HTML自闭合(self-closing)标签
  11. CPU制造工艺完整过程(图文)
  12. linux自动微信发信息,Linux下发送微信消息
  13. 思岚S2激光雷达5-雷达数据实时保存
  14. 简单个人静态HTML网页设计作品——广西北海家乡旅游景点 10页 DIV布局个人介绍网页模板代码 DW个人网站制作成品 web网页制作与实现
  15. ZOOMIT的使用方法
  16. 第39级台阶(dp)
  17. python爬虫网易云音乐最热评论并分析_网易云音乐热门评论api分析
  18. 推荐系统——Converged Recommendation System Based on RNN and BP Neural Networks
  19. docker学习(一)命令大全
  20. C++判断一个数是不是质数

热门文章

  1. 我的助理辞职了,献给那些浮躁的职场人
  2. 修改注册表导致无法登录到你的账户
  3. 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine
  4. CSS - 使用CSS3旋转文本
  5. 河海大学20计算机考研复试回忆
  6. 股海沉浮:2005年到2007年超级大牛市行情领涨板块分析,推及2009年可能的走势
  7. Linux再学--shell基础5正则表达式和文本搜索
  8. 安装程序检测到计算机重启过程,win10系统安装photoshop提示安装程序检测到计算机重新启动操作可能处于挂起状挂起状态的具体办法...
  9. 收件箱和发件箱 表设计_在收件箱中播放不错
  10. 企业咨询【2022年】:(一)、部门管理沟通的思考