• 一,什么是索引?
  • 索引是排序,按照给定的key进行排序。如KEY first (first_name).这里是按照first_name这个关键因子进行排序。
  • 而KEY type_status_date (post_type,post_status,post_date)这里将是根据三个关键因子进行排序。先比较post_type,如果post_type相等则比较post_status,根据post_status进行排序,如果前两者都相等,则比较第三个post_date.
  • 所以,索引就是指定关键字段进行排序后,生成一个索引文件,以便于查找定位,提高搜索速度。
  • 二,索引的作用是?
  • 1,保持数据的完整性。 如主键,唯一键。
  • 2,优化数据访问,提高查询速度。
  • 3,结果排序。
  • 三,索引的数据结构。
  • 数据库查询是数据库最主要的功能,常见的查找算法有:
  • 顺序查找。
  • 二分查找。
  • 二叉树查找。
  • 索引使用的数据结构有:B-树,B+树。关于这个数据结构可以根据数据结构的算法去学习。
  • B+树的定义:
  • B+树是B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:
  • 1.有n棵子树的结点中含有n个关键字,每个关键字不保存数据,只用来索引,所有数据都保存在叶子节点。
  • 2.所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  • 3.所有的非终端结点可以看成是索引部分,结点中仅含其子树(根结点)中的最大(或最小 )关键字。
  • 4.通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。
  • 四,mysql两种引擎的索引实现。
  • 1,MyISAM索引实现:
  • 1)使用B+树作为索引结构。
  • 2)叶节点的data域存放的是数据记录的地址。(这是与InnoDb的重要区别)
  • 3)在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是在主索引要求key是唯一的,而辅助索引的key可以重复。
  • 4)MyISAM的索引方式也叫做“非聚集”的,以这种称呼是为了与InnoDb的聚集索引区分开来。
  • 示意图:

mysql排序如何走索引 mysql索引排序算法_mysql排序如何走索引

  • 2,InnoDB的索引实现。
  • 1)也是使用B+树作为索引结构,但是具体实现方式却截然不同。
  • 2)InnoDB的数据文件本身就是primary索引文件,MyISAM索引文件和数据文件是分离的。索引文件仅保存数据记录的地址。
  • 3)叶节点包含了完整的数据记录。这种索引叫做聚集做引。
  • 4)因为InnoDB的数据文件本身就要按主键聚集,所以InnoDB要求必须有主键(MyISQM可以没有)
  • 5)当InnoDB没有primary key也没有not null的unique key时,那么会自动生成一个6byte的长整型主键。
  • 6)InnoDB的所有辅助索引都引用主键作为data域。

mysql排序如何走索引 mysql索引排序算法_mysql排序如何走索引_02

  • 五,个人理解。
  • 1,理解数据库的索引时,可以根据原理实现来理解,之前看别人介绍索引的时候,就说索引像书本的目录,但是理解起来太虚了,理解起来有点障碍。但是如果知道了索引的原理——本质是采用B+树进行排序(本质是一个数据结构)。然后再通过理解叶子节点存放的是数据记录(InnoDB)还是数据记录的地址(MyISAM)。就能够比较好理解这些内容了。