MySQL性能调优——索引详解与索引的优化

——索引优化,能够说是数据库相关优化、理解尤为是查询优化中最经常使用的优化手段之一。因此,只有深刻索引的实现原理、存储方式、不一样索引间区别,才能设计或使用最优的索引,最大幅度的提高查询效率!php

 B tree(b- tree) 和 B+tree

至关于一个节点能够有大于2个子节点的二叉查找数。html

B tree :是一种自平衡数,可以保持数据有序(每一层都有序),查找、删除、插入时间为O(logn)。全部叶子节点都在一层,跟记录有关的信息会放在每个节点,因此查找一个记录跟二叉查找树同样,从根遍历。非叶子节点能够拥有可变数量的子节点(数量范围事先定好),当插入或删除致使超出范围,可能会分离或者合并。面试

B+ tree :可以保持数据有序(每一层都有序),查找、删除、插入时间为O(logn)。全部叶子节点都在一层,跟记录有关的信息都放在叶子节点上,非叶子节点只存放索引,且将叶子节点经过指针链接在一块儿,造成一条链表。因此对整棵树的遍历只要一次线性遍历叶子节点便可。算法

查找[编辑]

查找以典型的方式进行,相似于二叉查找树。起始于根节点,自顶向下遍历树,选择其分离值在要查找值的任意一边的子指针。在节点内部典型的使用是二分查找来肯定这个位置。sql

插入[编辑]

节点要处于违规状态,它必须包含在可接受范围以外数目的元素。数据库

  1. 首先,查找要插入其中的节点的位置。接着把值插入这个节点中。
  2. 若是没有节点处于违规状态则处理结束。
  3. 若是某个节点有过多元素,则把它分裂为两个节点,每一个都有最小数目的元素。在树上递归向上继续这个处理直到到达根节点,若是根节点被分裂,则建立一个新根节点。为了使它工做,元素的最小和最大数目典型的必须选择为使最小数不小于最大数的一半。

删除[编辑]

  1. 首先,查找要删除的值。接着从包含它的节点中删除这个值。
  2. 若是没有节点处于违规状态则处理结束。
  3. 若是节点处于违规状态则有两种可能状况:
    1. 它的兄弟节点,就是同一个父节点的子节点,能够把一个或多个它的子节点转移到当前节点,而把它返回为合法状态。若是是这样,在更改父节点和两个兄弟节点的分离值以后处理结束。
    2. 它的兄弟节点因为处在低边界上而没有额外的子节点。在这种状况下把两个兄弟节点合并到一个单一的节点中,并且咱们递归到父节点上,由于它被删除了一个子节点。持续这个处理直到当前节点是合法状态或者到达根节点,在其上根节点的子节点被合并并且合并后的节点成为新的根节点。

1、B+Tree索引数据结构

一、概述架构

Mysql数据库中使用最频繁的索引类型,基本全部存储引擎都支持BTree索引。正是其优异的检索表现,才使其有这样的地位。优化

二、存储结构spa

正如其名,这类索引的物理文件大多就是以BTree结构来存储的,但会有不一样的存储引擎在使用BTree索引时,对存储结构稍做修改,好比MyISAM存储引擎,使用B+Tree的数据结构,它相对与BTree结构,全部的数据都存放在叶子节点上,且把叶子节点经过指针链接到一块儿,造成了一条数据链表,以加快相邻数据的检索效率。

(对B树、B+树不熟悉的,可参看博客索引基础——B-Tree、B+Tree、红黑树、B*Tree数据结构 或《算法导论》)

 

另外,对于innoDB存储引擎,虽然一样使用B+Tree做为索引的存储结构,但具体实现却与MyISAM大相径庭,这也是做为MyISAM与InnoDB存储引擎的一个重要区别反复被面试官问到。(关于MyISAM与InnoDB存储引擎可参看博客MySQL架构设计——MyISAM存储引擎与InnoDB存储引擎

 

(1)MyISAM引擎索引结构的叶子节点的数据域,存放的并非实际的数据记录,而是数据记录的地址。索引文件与数据文件分离,这样的索引称为“非聚簇索引”。MyISAM的主索引与辅助索引区别并不大,只是主键索引不能有重复的关键字。

以下图所示为非聚簇索引的主键索引:

其检索算法:先按照B+Tree的检索算法检索,找到指定关键字,则取出对应数据域的值,做为地址取出数据记录。

(2)InnoDB引擎索引结构的叶子节点的数据域,存放的就是实际的数据记录(对于主索引,此处会存放表中全部的数据记录;对于辅助索引此处会引用主键,检索的时候经过主键到主键索引中找到对应数据行),或者说,InnoDB的数据文件自己就是主键索引文件,这样的索引被称为“聚簇索引”,一个表只能有一个聚簇索引。

以下图所示为聚簇索引的主键索引:

 

 

 MySQL中只有memory支持Hash索引

参考:https://blog.csdn.net/zhangliangzi/article/details/51366345

相关文章
相关标签/搜索