一,什么是索引?
- 索引是排序,按照给定的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. - 所以,索引就是指定关键字段进行排序后,生成一个索引文件,以便于查找定位,提高搜索速度。
- 索引是排序,按照给定的key进行排序。如KEY
二,索引的作用是?
- 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的聚集索引区分开来。
- 示意图:
- 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域。
- 1,MyISAM索引实现:
- 五,个人理解。
- 1,理解数据库的索引时,可以根据原理实现来理解,之前看别人介绍索引的时候,就说索引像书本的目录,但是理解起来太虚了,理解起来有点障碍。但是如果知道了索引的原理——本质是采用B+树进行排序(本质是一个数据结构)。然后再通过理解叶子节点存放的是数据记录(InnoDB)还是数据记录的地址(MyISAM)。就能够比较好理解这些内容了。
mysql学习(一)--索引的数据结构
最新推荐文章于 2024-03-14 06:15:00 发布