理解B+树,就能真正记住MySQL索引优化规则

B+树是一种多路搜索树,相较于B树有以下特性:
节点分为内部节点、叶子节点、根节点(根节点在某些情况下也属于内部节点、叶子节点)。
每个节点最多包含m-1个关键字、m个子节点。
内部节点不存储数据只作为索引使用,所有数据存储在叶子节点中。
节点中的关键字均为有序,取节点中某一关键字x,x左侧关键字与节点均小于x右侧关键字与节点均大于x。
所有叶子节点由指针有序相连。

B+树作为索引的优势

  1. 高效的查找性能: 通常情况下索引因大小问题无法一次性加载到内存中,必然涉及磁盘IO。B+树的内部节点不包含具体数据能够包含更多的关键字以减少树的高度,这就意味着可以减少磁盘IO。

  2. 适合范围查询: B+树的叶子节点按照键值大小顺序连接形成有序链表,这使得范围查询和范围扫描操作变得高效。B+树能够快速定位到范围查询的起始位置,并且在有序链表上进行连续扫描。

索引优化和B+树

  1. 出现在where关键词后面的字段适合设置为索引列,或者连接子句中指定的列也是可以设置为索引列;
    选择列创建索引~

  2. 对于唯一性的列,设置索引效果是最佳的;而对于具有多个重复值的列,其索引效果是最差的。 因此设置索引时,大家需要考虑该列中值的分布情况;
    唯一索引在B+树叶子节点中只占一个值,可以通过内部节点快速找到。非唯一索引在找到之后还需要根据链表继续向后查找。在极端情况下可能读了一半叶子节点这样索引基本没有效果

  3. 短索引原则即指定前缀长度,节省大量索引空间。 索引类型占空间越小每次IO能够读取更多的节点。反之则增加磁盘IO次数。

  4. 适度设置索引列:设置索引时要考虑设置合适的列,不要造成“过多的索引列”。索引不是越多越好,在插入数据以及删除数据时需要维护相应的索引树则会降低插入删除效率。

  5. 联合索引,遵循最左前缀匹配原则: 最左匹配原则并不是指查询条件的顺序,而是指查询条件中是否包含索引最左列字段;
    使用联合索引时索引树内关键字是同时包含联合索引中所有的列并按照顺序排列,如果不包含左侧列的查询时是无法使用联合索引的。

  6. 索引列不能参与计算,保持列“干净”: 如果索引列使用了函数或者其他计算就会导致索引失效,因为索引树中存储的都是原值如果应用函数就要全部都应用显然得不偿失。

  7. 范围条件存在多个索引时,查询可以命中索引: 范围条件有:<、<=、>、>=、between等,因为B+树的叶子节点都是有序存放的。如果是联合索引则最左匹配原则遇到范围查找后终止,返回查找后的列无法使用索引。因为范围查找出的记录是按照左侧列包含范围查找列排序的,无法保证右侧索引列有序故而右侧索引列失效。

  8. 利用覆盖索引进行查询,避免回表:innodb引擎是将所有数据存放在聚集索引中的,由主键构成的索引包含记录数据。其他索引时不包含记录数据的只包含聚集索引中的主键,如果查询使用了非聚集索引且改索引上无法满足查询则需要通过主键在聚集索引中再次检索称之为回标,如果当前索引中包含的查询的所有列则可直接返回。

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

推荐阅读更多精彩内容