mysql索引B+Tree,B-Tree数据结构和搜索引擎之间的关系

1,mysql的搜索引擎常用的有两种MyISAM和InnoDB,那么我问大家一个问题,搜索引擎是作用于表还是作用于数据库呢?如果你真的不知道我建议你打开自己的表看一下,看下表的结构就明白了。


搜索引擎作用于表

那么这两个搜索引擎具体有什么区别呢,我们找到自己的mysql的安装目录看下里面的结构,


不同搜索引擎生成的表的结构

我们从上图可以看到搜索引擎为MyISAM的表包含.frm,.MYD,.MYI。而搜索引擎为InnoDB的表包含.frm和.ibd两个文件,那么这几个文件分别代表什么呢?这个问题先放到这我们转一个话题,先了解一下mysql索引的常用的数据结构,看懂了这几个数据结构,再结合搜索引擎我们就明白了。

索引是什么呢?

是帮助mysql高效获取排好序的数据结构(最简单明了)

索引的数据结构包含哪些?

二叉树,红黑树,hash(看下mysql在创建索引的时候选择索引类型的时候有这一个选项),B-Tree,B+Tree,相信能有耐心想看完这遍文章的就是想彻底了解搜索引擎和索引之间的关系,以及索引数据结构的,不要告诉我这几个数据结构没听过,什么是红黑树不知道的话建议去看下jdk1.8的hashmap的数据结构理解。https://www.cs.usfca.edu/~galles/visualization/Algorithms.html这个网站是数据结构可视化用的,建议你收藏。

为什么我们的索引不用二叉树呢,因为二叉树有可能退化成链表结构结构,那么查询效率就将会收到极大的限制,红黑树是一个自平衡二叉树,我们用到的B-Tree是对二叉树进行了横向的扩展,为什么这么说呢,我的B-Tree或者B+Tree存储的都是一组索引或者一组索引加上数据data,一个节点大概可以存储16k,一般的索引是int或者bigint那么就可以一个节点存储16kb/14b=1170个数据,那么h=3高度的就可以存储最多为1170*1170*16大概为2千万数据量,一个16k的数据在进行磁盘io的时候是很快的,所以加了索引以后2千万的数据也就用几百秒。

B-tree的数据结构

字体写的不太好看,能看懂就行,叶子节点的指针为空

B-Tree的数据结构

mysql选择B+Tree是B-Tree的变种,两者比较有什么区别呢?我们讲完本节希望你能自己得出结论,

B+Tree的特点

1,非叶子节点不存储data,只存储索引(冗余)索引字段在节点间有重复,看下  B-Tree有没有这个重复的现象,当然没有

2,非叶子节点包含所有的索引字段,B-Tree则包含索引对应的data字段

3,叶子节点用指针链接,提高区间的访问性能,我们在做业务开发的时候进行区间查询是常用的,B+Tree进行区间查询的效率要比B-Tree高很多,看下图如果查询18到39之间的数据的话,B-Tree需要回到根节点重新遍历一遍,而B+Tree叶子节点之间有指针可以直接查询。并且节点存储的是索引比B-Tree可以更多的存储


B+Tree的数据结构

好了数据结构这块相信你理解了如果不理解可以留言。

那么我们回到之前的问题有关搜索引擎分别为MyISAM和InnoDB的存储数据索引的了解,我们先来看下MyISAM,上面提到了三个文件如果你忘了建议回去看一下叫什么,最好看下自己的安装目录的内容。


搜索引擎为MyISAM存储

上面为们可以看出MyISAM索引文件和数据文件是分离的所以我们称为非聚集索引,data存储的是索引所在元素的磁盘地址指针,我们会根据这个磁盘地址指针回查表。从上图的标志我们可以看到MYI和MYD分别指的是mysql的index 和mysql的data.那么也不难理解innodb的文件.idb是索引文件和data文件的组合也称为聚集索引


搜索引擎为innodb的数据存储

我们需要了解一下Innodb必须有逐渐因为数据结构的要求,如果建表的时候没有主键,那么innodb会自动给你创建使用uuid,我们不建议innodb自己创建的希望用整形自增的,因为我们在查索引数据结构的时候会进行索引大小的比较,如果为UUID,则数据就比较大,比较起来比较慢。

我们简单补充一下联合索引的底层存储结构长什么样子?


联合索引的数据结构途中为三个字段的联合索引

那么我们的索引有hash数据结构,查找单个数特别块但是不支持范围的查找,B+Tree在范围查找做的特别好,叶子节点带双向链接,B-Tree则在范围查找的时候很大可能需要重复从根节点查速度会特别慢。

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

推荐阅读更多精彩内容