这是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. 诺基亚(Microsoft Devices Group)2014暑期实习生笔试题知识点

    总结一下Microsoft Devices Group的软件类笔试题,全部笔试题分两份试卷,逻辑题一份和软件測试题一份,仅仅总结技术题喽~题目全英文,仅仅包括选择题和填空题.选择题居多.分单选和多选. ...

  3. 面试题:MySQL性能调优——索引详解与索引的优化 没用

    ——索引优化,可以说是数据库相关优化.理解尤其是查询优化中最常用的优化手段之一.所以,只有深入索引的实现原理.存储方式.不同索引间区别,才能设计或使用最优的索引,最大幅度的提升查询效率! 一.BTre ...

  4. BAT及各大互联网公司2014前端笔试面试题--Html,Css篇

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...

  5. BAT及各大互联网公司2014前端笔试面试题--JavaScript篇

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习js更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确, ...

  6. 面试题2:BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇

    BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内 ...

  7. 阿里云vps上mysql挂掉的解决办法

    阿里云vps上mysql挂掉的解决办法 4条回复 用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知.之前没 ...

  8. [分享]运维分享一一阿里云linux系统mysql密码修改脚本

    [分享]运维分享一一阿里云linux系统mysql密码修改脚本       大象吃豆子 级别: 小白 发帖 12 云币 27 加关注 写私信   只看楼主 更多操作楼主  发表于: 2014-09-3 ...

  9. 【转】BAT及各大互联网公司2014前端笔试面试题:JavaScript篇

    原文转自:http://blog.jobbole.com/78738/ 很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是 ...

随机推荐

  1. 它们的定义dialog

    (1)你需要准备自己的自定义对话框样式,是一个布局文件 <?xml version="1.0" encoding="utf-8"? > <Li ...

  2. Java String类的比较运算

    面试题:(多选)以下返回true的有() A. "beijing" == "beijing" B. "beijing".equals(new ...

  3. H.265/HEVC Codec 编解码 (MP4 和 TS)

    1. H.265/HEVC 播放器 1) VLC media player 2.1.3 (眼下不支持H.265 TS播放) 2)ffmpeg中的ffplay (如:ffplay  hevc.ts) 3 ...

  4. Android docs4.3API

    查找在线课程,加速进入Android docs API,最主要的原因是网上加载js文件速度慢,另一种是装google字体缓慢! import java.io.BufferedReader; impor ...

  5. 监测谁用了SQL Server的Tempdb空间

    原文:监测谁用了SQL Server的Tempdb空间 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/02/11/sql-server-tempdb. ...

  6. ACM字符串处理算法经典:字符串搜索

    语法:result=strfind(char str[],char key[]); 参数: str[]:在这个源字符串查找操作 key[]:搜索字符串.不能为空字符串 回报值:     假设查找成功. ...

  7. Linux进程的状态转换图

    http://blog.csdn.net/mu0206mu/article/details/7348618 ◆运行状态(TASK_RUNNING) 当进程正在被CPU执行,或已经准备就绪随时可由调度程 ...

  8. 用Unicode迎接未来

         项目中使用了emoji,然后,问题产生了,后端MySQL数据库无法存储emoji字符,悲了个剧.      emoji是Unicode字符集的子集,Unicode的使用应该非常普遍了,怎么会 ...

  9. JBehave

    JBehave 上篇我们说到如何从Github上clone出一个JBehave项目,既是为了学习JBehava,也是为了熟悉下Github.从clone下来的项目看来,基本没什么问题,稍微捋一捋就可以 ...

  10. java RC4加密和解码

    package com.*; public class RC4 { public static String decry_RC4(byte[] data, String key) { if (data ...