这是2014北京站的两副面孔阿里实习生问题扯在一起:

在MySQL中。索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,比方MyISAM和InnoDB存储引擎。

MyISAM索引实现:

MyISAM存储引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。

MyISAM的索引方式也叫做“非Ju集”的。之所以这么称呼是为了与InnoDB的ju集索引区分。

InnoDB索引实现:

尽管InnoDB也使用B+Tree作为索引结构,但详细实现方式却与MyISAM截然不同。

第一个重大差别是:InnoDB的数据文件本身就是索引文件。

第二个与MyISAM索引的不同是:InnoDB的辅助索引data域存储对应记录主键的值而不是地址。ju集索引这样的实现方式使得按主键的搜索十分高效,可是辅助索引搜索须要检索两遍索引:首先检索辅助索引获得主键。然后用主键到主索引中检索获得记录。

事实上,数据库索引的实现能够採用红黑树。B-Tree树数据结构。

可是为什么实际上採用的B+Tree呢?

这要从计算机存储原理和操作系统相关知识说起。

由于数据表的索引比較大。不能常驻内存,所以以文件形式存储在磁盘中。所以当查询数据的时候就须要I/O操作。

高效率查询的目标是较少I/O次数。

一次I/O一般读取一页(一般为4k)大小的数据(局部性原理)。

如此,在B-树中,每当申请一个新结点时,就以页的大小来申请。也就是说一次I/o能够读取一个一个结点(包括非常多key)的数据。而在红黑树结构结构中。逻辑相邻的结点物理上不一定相邻,就是说,读取同等的数据须要多次I/O。

所以选择B-树效率更好。

那为何终于选了B+树呢?

由于B+树内节点去掉了data域,因此能够拥有更大的出度,就是说一个结点能够存储很多其它的内结点,那么I/O效率更高。

了解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助,比如知道了InnoDB的索引实现后,就非常easy明确为什么不建议使用过长的字段作为主键,由于全部辅助索引都引用主索引。过长的主索引会令辅助索引变得过大。再比如,用非单调的字段作为主键在InnoDB中不是个好主意。由于InnoDB数据文件本身是一颗B+Tree,非单调的主键会造成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个非常好的选择。

ju集索引与非ju集索引之分:

InnoDB是ju集索引,由于它的B+树的叶结点包括了完整的数据记录。

而MyISAM方式B+树的叶结点仅仅是存储了数据的地址。故称为非ju集索引。

索引使用策略及优化

MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization)。详情查看此文:

《MySQL索引背后的数据结构及算法原理》

注:聚,都用ju取代,ju集竟然是敏感词。太坑了。求破解方法

版权声明:本文博客原创文章。博客,未经同意,不得转载。

2014阿里实习生面试题——mysql如何实现的索引相关推荐

  1. 2014阿里实习生面试题——mysql如何实现索引的

    这是2014阿里实习生北京站二面的一道试题: 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,比如MyISAM和InnoDB存储引擎. MyISAM索引实现: MyI ...

  2. mysql实习生笔试题_2014阿里实习生面试题MySQL如何实现索引的

    [相关专题推荐:mysql面试题(2020)] 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,比如MyISAM和InnoDB存储引擎. MyISAM索引实现: My ...

  3. 【面试题 - mysql】进阶篇 - 索引

    进阶篇 索引 1 索引概述 2 优点.缺点 3 索引结构(B+,Hash) 3.1 二叉树 3.2 红黑树 3.3 B树 3.4 B+树 3.5 hash 4 面试题:为什么 InnoDB 存储引擎选 ...

  4. mysql腾讯面试题_2020腾讯阿里精选面试题100+(包含答案)

    前言 武功再高,也怕菜刀,确认过眼神,你得是对的人才行.就算是技巧,也要建立在硬核实力上面. 本文总结的是关于BAT的精选面试题 由于面试题较多,篇幅过长.就没有一 一展示出来了,面试题获取看我个人介 ...

  5. 阿里2020春招Java实习生笔试题

    阿里2020春招Java实习生笔试题 第1题 第2题 今天上午参加了阿里实习笔试,2个编程题(60分钟),做的简直是惨不忍睹,一个都没出来.虽然和面试无缘了,但希望能帮到后面笔试的同学,所以将题目大概 ...

  6. 学生党如何拿到阿里技术offer:《阿里实习生面试经验(成功)》

    上次的博文为大家分享了一篇来自成功拿到阿里offer的研究生学姐的面试经验,其实阿里每年都会为大三或者研二这样的在校学生提供实习生的机会,不久之前还在微信中看到阿里淘宝招聘实习生的微信文章,虽然毕业实 ...

  7. 为进阿里刷面试题-日更

    为进阿里刷面试题-日更(加油打工人) 下面的题目都是自己理解的,如有漏,或者写错的,请指出来!加油! JAVA基础 1.JVM内存分配原理,垃圾回收原理 2.ConcurrentHashMap 和 h ...

  8. 阿里最新php面试题及答案,面经网-阿里php面试题(四)

    阿里php面试题(四) 1.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. 2.session与 ...

  9. 数据库周刊33丨5大国产数据库中标中国移动;Oracle7月CPU安全预警;腾讯Tbase新版本发布;“2020数据技术嘉年华”有奖话题遴选;阿里云技术面试题;APEX 实现数据库自动巡检;MYSQ

    热门资讯 1.中国移动国产OLTP数据库中标公告:南大金仓阿里,万里开源中兴 分获大单 [摘要]近日,中国移动公布了 OLTP 自主可控数据库联合创新项目中标公告.公告显示:国产数据库中,南大通用.阿 ...

  10. 【腾讯阿里最全面试题】介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景

    [腾讯阿里最全面试题]介绍下Synchronized.Volatile.CAS.AQS,以及各自的使用场景(文章较长,建议收藏观看) 相关视频讲解: 面试中出现概念最高的技术-原来就是这个锁 后台开发 ...

最新文章

  1. 互联网趋势关键词:交流,为价值付费,资源整合
  2. Forrester 最新报告:阿里云稳居领导者地位,引领云原生开发浪潮
  3. Linux下打印调试管理
  4. ToF是否是噱头?小米王腾发长文详解...
  5. 输入班级人数,根据人数,挨个输入成绩,求平均分,求最高分最低分
  6. SQL中replace函数
  7. python笔记3:依次输入3个数排序打印(升序)
  8. Remoting技术
  9. idea 破解版安装
  10. 设计模式之组合模式-树形结构的处理
  11. 信息安全常见名词解释
  12. json for modern c++,这是我用过的最好用的json库了
  13. 2022-2023级西安交通大学MBA提前面试(预报名即将开启)6月初
  14. 红黑树的历史和由来。
  15. nsfw什么颜色_“ NSFW”是什么意思,以及如何使用它?
  16. 热式气体质量流量计检定规程_最佳实践:热式质量流量计实际标定的安全性和准确性...
  17. C语言·XDOJ练习·股票计算
  18. 编写银行转账系统的数据库
  19. www.yaxjf.com+m.php,使用PHP保存微信文章页的图片
  20. 船载雷达天线滑环的使用

热门文章

  1. 博客园 使用锚和书签制作目录
  2. 微信小程序选择图片,查看图片信息,浏览图片,图片上传
  3. .net 创建计划任务开机后自动以管理员身份启动运行 win7 ~ win10
  4. 多线程中,static函数与非static函数的区别?
  5. android之获取手机号码、获取手机操作系统版本号
  6. C#的yield return是怎么被调用到的?
  7. 1.4.3 Arithmetic Progressions
  8. Isolate -- Be Forget Feature Of The Object-Orient Programming
  9. 决策树算法小结(二) C4.5原理及代码实现
  10. Python正则表达式初识(七)