蓝盟弱电工程,MySQL知识系统——索引

发布者:上海IT外包 来源:www.linemore.com

    本文很简单,描述了InnoDB引擎的索引和优化策略。在开始之前,您需要了解:1)二叉搜索树(包括2-3搜索树,红黑树和其他数据结构)2)MySQL InnoDB引擎基础知识
  探索指数
  当然,了解索引要了解其数据结构。树中有许多应用程序。其中一个流行的用法是许多常见操作系统中的目录结构,包括UNIX和DOS。二叉搜索树是Java中两个集合类TreeSet和TreeMap的基础。所以对于数据库来说,I/O是它的性能瓶颈,减少树的深度直接有效,BTree和B + Tree应运而生。
  BTree和B + Tree(平衡树,多路搜索树,非二进制)
  B树
  BTree是一种搜索树,如二叉搜索树,红黑树等,它们是为了提高搜索效率而生成的。 BTree也是如此,可以看作是二叉搜索树的优化升级。二叉搜索树的特点是每个非叶子节点最多有两个子节点,但是当数据量非常大时,二叉搜索树的深度太深,搜索算法需要访问从根节点搜索时的节点。它已经变得非常多了。如果这些节点存储在外部存储(磁盘)中,则对节点的每次访问都等同于I/O操作。随着树的高度增加,频繁的I/O操作将降低查询的效率。 BTree更改为双叉,每个节点存储更多指针信息,从而减少树的深度并减少I/O操作的数量。
  使用BTree结构可以显着减少定位记录时遇到的中间过程,从而加快访问速度。
  定义(对于m阶BTree)
  根节点至少有两个子节点(除非根节点是叶节点)
  每个节点都有m-1个关键字,并按升序排序
  位于m-1和m关键字中的子节点的值在m-1和m个关键字的值之间。
  其他节点至少有m/2个子节点
  特性
  关键字集分布在整个树中;
  出现任何关键字,仅出现在一个节点中;
  搜索可以在非叶节点处结束;
  它的搜索性能相当于在整套关键字中进行二进制搜索;
  自动水平控制。
  B +树
  在大多数情况下,InnoDB存储引擎使用B + Tree进行索引。 B + Tree也是关系数据库中最常用和最有效的索引结构,但B + Tree索引找不到给定键的特定值。只能找到与数据行对应的页面,并且如上一节所述,数据库将整个页面读入内存并在内存中查找特定的数据行。定义(其定义与BTree基本相同,除了:)
  所有叶节点之间都有一个链指针;
  所有关键字都出现在叶节点上;
  非叶节点仅存储键值信息,数据记录存储在叶节点中。
  特性
  单个节点可以存储更多元素,使查询磁盘IO的次数更少,单个元素查找更有效;
  所有查询都必须找到叶子节点,查询性能稳定;
  叶节点将包含所有关键字以及指向数据记录的指针,叶节点本身按从最小到最大的顺序链接,并且范围查找性能更好。
  区别
  B + Tree是BTree的变种树。它与BTree的区别在于:
  B + Tree只能命中叶节点(BTree可以命中非叶节点),其性能相当于在关键字集中进行二进制搜索;
  BTree树的每个叶节点都有一个双向指针;
  BTree分支节点和叶子节点都保持记录的密钥和记录指针; B + Tree分支节点仅保存记录密钥副本,并且没有记录指针。所有记录都集中在叶节点的一个级别上,叶节点可以形成一维线性表,用于连续访问和范围查询。
  聚集索引和二级索引
  数据库中的B + Tree索引可以分为聚簇索引(聚簇索引)和二级索引(二级索引)。它们之间最大的区别是聚簇索引存储一行记录的所有信息,而辅助索引只包含索引列和用于查找相应行记录的“书签”。也就是说,在数据库的聚簇索引中,叶节点直接包含卫星数据。在NonClustered Index中,叶节点具有指向卫星数据的指针。
  聚集索引
  InnoDB使用聚簇索引来存储数据。
  与非聚簇索引的区别在于聚簇索引存储索引和行值。当表具有聚簇索引时,其数据存储在索引的叶页上。所以可以说InnoDB是一个基于索引的表。
  当我们使用聚集索引来检索表中的数据时,我们可以直接获得整行记录数据对应于聚簇索引的页面,并且不需要第二次操作。
  索引创建规则
  如果定义了主键,则此主键用作聚簇索引
  如果未定义主键,则表的第一个唯一非空索引将用作聚簇索引
  如果没有主键且没有合适的唯一索引,InnoDB会在内部生成隐藏的主键作为聚簇索引。这个隐藏的主键是一个6字节的列。通过插入数据增加列的值。二级指数
  辅助索引(也称为非聚集索引)不包含行的所有数据。除了包含关键字之外,它还包含一个标记,告诉InnoDB引擎在哪里可以找到与索引相对应的行数据。由于InnoDB引擎是一个索引组织表,因此该标记是相应行数据的聚簇索引键。
  辅助索引的存在不会影响聚簇索引中数据的组织,因此表可以具有多个辅助索引。
  使用二级索引查找表记录的过程:通过二级索引查找相应的关键字,最后使用聚簇索引中的关键字获取相应的行记录,这也是查找通常下行记录的方法。
  建议
  聚集索引的首选列
  具有大量不同值的列
  之间使用
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部