MySQL知识体系——索引
副问题[/!--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)
特征
B+Tree InnoDB 存储引擎在绝大大都环境下行使B+Tree成立索引,B+Tree也是相关型数据库中最为常用和有用的索引布局,可是B+Tree索引并不能找到一个给定键对应的详细值,它只能找到数据行对应的页,然后正如上一节所提到的,数据库把整个页读入到内存中,并在内存中查找详细的数据行。 界说(其界说根基与 BTree同,除了:)
特征
区别 B+Tree是BTree的一种变形树,它与BTree的差别在于:
聚积索引和帮助索引 数据库中的 B+Tree索引可以分为聚积索引(clustered index)和帮助索引(secondary index),它们之间的最大区别就是,聚积索引中存放着一条行记录的所有信息,而帮助索引中只包括索引列和一个用于查找对应行记录的“书签”。即在数据库的聚积索引中,叶子节点直接包括卫星数据。在帮助索引(NonClustered Index)中,叶节点带有指向卫星数据的指针。 聚积索引 InnoDB行使了聚积索引存储数据。 与非聚积索引的区别则是,聚积索引既存储了索引,也存储了行值。当一个表有一个聚积索引,它的数据是存储在索引的叶子页(leaf pages)上的。因此可以说InnoDB是基于索引的表。 当我们行使聚积索引对表中的数据举办检索时,可以直接得到聚积索引所对应的整条行记录数据地址的页,不必要举办第二次操纵。 索引的成立法则
帮助索引 帮助索引,也叫做非聚积索引,叶节点不包括行的所稀有据。除了包括要害字外,还包括了一个标志,这个标志用来汇报InnoDB引擎从那边可以找到与索引相对应的行数据。因为InnoDB引擎是索引组织表,因此,这个标志就是响应的行数据的聚积索引要害字。 帮助索引的存在并不影响数据在聚积索引中的组织,因此一个表可以有多个帮助索引。 行使帮助索引查找一条表记录的进程:通过帮助索引查找到对应的要害字,最后在聚积索引中行使要害字获取对应的行记录,这也是凡是环境下行记录的查找方法。 行使提议 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |