加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL知识体系——索引

发布时间:2019-04-09 04:09:05 所属栏目:编程 来源:佚名杨彬Lennon
导读:本文直切主题,针对InnoDB引擎描写索引及优化计策。在开始之前,必要读者相识:1)二叉查找树(包罗2-3查找树、红黑树等数据布局)2)MySQL的InnoDB引擎基本常识 索引初探 要相识索引,虽然要相识其数据布局。树有许多应用,风行的用法之一是包罗UNIX和DOS
副问题[/!--empirenews.page--]

本文直切主题,针对InnoDB引擎描写索引及优化计策。在开始之前,必要读者相识:1)二叉查找树(包罗2-3查找树、红黑树等数据布局)2)MySQL的InnoDB引擎基本常识

索引初探

要相识索引,虽然要相识其数据布局。树有许多应用,风行的用法之一是包罗UNIX和DOS在内的很多常用操纵体系中的目次布局,二叉查找树又是Java中两种荟萃类TreeSet和TreeMap实现的基本。那么对付数据库,I/O是其机能瓶颈地址,镌汰树的深度是直接有用的,BTree和B+Tree应运而生。

BTree和B+Tree(Balance-Tree,多路搜刮树,非二叉)

BTree

BTree是一种查找树,犹如二叉查找树,红黑树等,都是为进步查找服从而发生的,BTree也是云云,可以把它看做二叉查找树的优化进级。二叉查找树的特点是每个非叶节点都最多只有两个子节点,可是当数据量很是大时,二叉查找树的深渡过深,搜刮算法自根节点向下搜刮时,必要会见的节点也就变的相等多。假如这些节点存储在外存储器(磁盘)中,每会见一个节点,相等于就是举办了一次I/O操纵,跟着树高度的增进,频仍的I/O操纵必然会低落查询的服从。BTree改二叉为多叉,每个节点存储更多的指针信息,以此到达镌汰树的深度、低落I/O操纵数。

行使BTree布局可以明显镌汰定位记录时所经验的中间进程,从而加速存取速率。

界说(对付一个m阶BTree)

  •  根节点至少有两个子节点(除非根结点为叶节点)
  •  每个节点有m-1个要害字,而且以升序分列
  •  位于 m-1和m 要害字的子节点的值位于 m-1和m 要害字对应的值之间
  •  其余节点至少有m/2个子节点

特征

  •  要害字荟萃漫衍在整棵树中;
  •  任何一个要害字呈现且只呈此刻一个节点中;
  •  搜刮有也许在非叶节点竣事;
  •  其搜刮机能等价于在要害字全集内做一次二分查找;
  •  自动条理节制。

B+Tree

InnoDB 存储引擎在绝大大都环境下行使B+Tree成立索引,B+Tree也是相关型数据库中最为常用和有用的索引布局,可是B+Tree索引并不能找到一个给定键对应的详细值,它只能找到数据行对应的页,然后正如上一节所提到的,数据库把整个页读入到内存中,并在内存中查找详细的数据行。

界说(其界说根基与 BTree同,除了:)

  •     全部叶节点之间都有一个链指针;
  •     全部要害字都在叶子结点呈现;
  •     非叶子节点只存储键值信息,数据记录都存放在叶节点中。

特征

  •  单节点可以存储更多的元素,使得查询磁盘IO次数更少,越发高效的单位素查找;
  •  全部查询都要查找到叶子节点,查询机能不变;
  •  叶子节点会包括全部的要害字,以及指向数据记录的指针,而且叶子节点自己是按照要害字的巨细从小到大次序链接,范畴查找机能更优。

区别

      B+Tree是BTree的一种变形树,它与BTree的差别在于:

  •  B+Tree只有到达叶子结点才掷中(BTree可以在非叶子结点掷中),其机能也等价于在要害字全集做一次二分查找;
  •  BTree树每个叶子节点都有双向指针;
  •  BTree分支节点和叶节点均生涯记录的要害码和记录的指针;B+Tree分支节点只生涯记录要害码的复制,无记录指针。全部记录都齐集在叶节点一层,而且叶节点可以组成一维线性表,便于持续会见和范畴查询。 

MySQL常识系统——索引

聚积索引和帮助索引

数据库中的 B+Tree索引可以分为聚积索引(clustered index)和帮助索引(secondary index),它们之间的最大区别就是,聚积索引中存放着一条行记录的所有信息,而帮助索引中只包括索引列和一个用于查找对应行记录的“书签”。即在数据库的聚积索引中,叶子节点直接包括卫星数据。在帮助索引(NonClustered Index)中,叶节点带有指向卫星数据的指针。

聚积索引

InnoDB行使了聚积索引存储数据。

与非聚积索引的区别则是,聚积索引既存储了索引,也存储了行值。当一个表有一个聚积索引,它的数据是存储在索引的叶子页(leaf pages)上的。因此可以说InnoDB是基于索引的表。

当我们行使聚积索引对表中的数据举办检索时,可以直接得到聚积索引所对应的整条行记录数据地址的页,不必要举办第二次操纵。

索引的成立法则

  •  假如一个主键被界说了,那么这个主键就是作为聚积索引
  •  假如没有主键被界说,那么该表的第一个独一非空索引被作为聚积索引
  •  假如没有主键也没有吻合的独一索引,那么InnoDB内部会天生一个潜匿的主键作为聚积索引,这个潜匿的主键是一个6个字节的列,改列的值会跟着数据的插入自增

帮助索引

帮助索引,也叫做非聚积索引,叶节点不包括行的所稀有据。除了包括要害字外,还包括了一个标志,这个标志用来汇报InnoDB引擎从那边可以找到与索引相对应的行数据。因为InnoDB引擎是索引组织表,因此,这个标志就是响应的行数据的聚积索引要害字。

帮助索引的存在并不影响数据在聚积索引中的组织,因此一个表可以有多个帮助索引。

行使帮助索引查找一条表记录的进程:通过帮助索引查找到对应的要害字,最后在聚积索引中行使要害字获取对应的行记录,这也是凡是环境下行记录的查找方法。

行使提议

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读