面试题-Mysql索引原理

Mysql面试题中索引肯定是重中之重。

    刚工作那会第一次面试,就被问到了索引,我还记得当时的场景

    问:知道Mysql的索引吗?

    答:知道。

    问:然后又问为什么要加索引?

    答:我回答索引就像目录一样,能提升查找速度。

    大家是不是感觉弱爆了,随着工作经验的增加,我对索引有了更深入的了解,下面就来分享下我眼中的索引,分享以问题的形式,从敲门到进门。

一、如果数据库中出现了慢查询怎么办?

Anw:加索引可以提升查找效率。

二、什么是索引?

Anw:索引是一种数据结构,Mysql的索引使用B+树实现,B+树可以快速搜索到想要的数据。

三、哪些数据结构可以做索引?

先来解释几个概念后续能用到:

节点的度:节点拥有子树的个数

树的度    :节点度的最大值

树的高度:树的层数

1.哈希表

哈希是一种算法,通过哈希算法可以算出索引下标这样就确定了数据所在的位置,实际上是一种数组结构,如果两个数据计算出的下标相同,则以链表的形式添加元素,这种数据结构的好处是它可以很快的定位到数据,但是不支持范围查询,JAVA语言中我们最常用的HashMap就是使用的这种结构,数组+链表+红黑树,至于为什么有红黑树,当链表过长时查询效率降低。转为红黑树提升查询效率。

 2.平衡二叉树

一颗典型的树形结构,有根节点、左子树、右子树,左子树小于右子树,每个节点只有一个元素,支持范围查找,但是效率不如哈希表。

3.B树

和平衡二叉树差不多,但是树的度更大,也就是B树每个节点可以可以存储多个元素,索引和数据存在一起。

 4.B+树

与B树的不同点在于,它的非叶子节点存放着索引,叶子节点存放数据,而且叶子节点通过链表链接在一起,它的优势在于,非叶子节点只存放索引它能够容纳更多的索引,树高比B树低,IO次数少,查询效率更高。

四、MysqlB+树中一个节点的大小有多大?

一个节点的大小为一页,一页是指Mysql中的一页,大小为16k,而操作系统中一页的大小为4k,那么也就是Mysql的一页=操作系统的四页。

五、Mysql的节点大小为一页16k,为什么是16k?

先来张图,看下主键索引和辅助索引

可以看到主键索引树上,存放着数据和索引,而辅助索引存放着索引和主键索引的位置,如果通过主键索引查询,直接在主键索引树就可以找到数据,如果通过辅助索引查找则还需要通过找到的主键索引值,回到主键索引树找到数据,称为回表。

非叶子节点:主键、指针

叶子节点:数据

叶子节点:一个节点的大小是一页16k,假设一条数据大小1k,则一个节点可以存放16条数据。

非叶子节点:一般来说主键id的类型是bigint(10)10b,Innodb引擎中指针为6b,那么一页可以存放 16000b/(10b+6b)=1000个索引,那么一颗高度为2的b+树可以存放1000*16=16000条数据,一颗高度为3的b+树可以存放1000*1000*16=16000000,哇哦 1600W条数据,是不是有惊人。查找数据的时候一次页的查找代表一次IO,那么通过主键查找一般只需要3次以内的IO就可以找到数据,这个大小是可以调整的,但一般不会调整。


六、什么是覆盖索引?

    一般来说通过辅助索引查找数据时,先在辅助索引找到主键索引的位置,然后再去主键索引树查找数据,回表操作会耗费性能,如果查询的结果就是辅助索引,如select 辅助索引 from table,这样就可以避免回表,直接返回结果。

七、什么是联合索引?

    假设建立了a、b、c为顺序的联合索引,相当于建立a,(a、b),(a、b、c)三个索引

查询bc肯定是用不到索引的,a、ab、ba、abc、acb都可以使用到索引的。

八、什么是索引下推?

    还是那个假设,建立了a、b、c为顺序的联合索引

select * from table where a=10 and b like '%b' and d like '%d'

没有索引下推:先找到a=10的数据,返回mysql服务端,服务端根据条件遍历这些数据,是否有符合的数据。

索引下推:先返回符合a=10的索引,然后判断b like '%b' and d like '%d'符合条件的索引,符合条件,则找到数据,不符合直接拒绝。

有了索引下推,可以在like的时候减少回表次数。

九、重复值较多的字段不建议建立索引

    重复值较多的话,如果通过这个字段进行查询,则需要频繁的回表,降低效率,效率还不如主键索引树查询。

十、Mysql order by索引

order by的字段,可以是联合索引,不能是函数。


感谢各位老铁阅读,更多请关注公众号:别明天就今天吧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352