MySQL数据库索引底层采用B+Tree,了解B+Tree先从B-Tree说起。本问主要是在BTree和B+Tree详解这个文章的基础上整理而来:
B-Tree
每个节点包含key、data和指针,key和data一一对应,其中key为键值,按照升序进行排列;而data为对应的数据。其中每个非叶子节点的1指针个数=key个数+1。实例如下图所示:
B+Tree
非叶子节点只有key,叶子节点有key和data,而叶子节点之间有链指针。实例如下:
相对于b-tree,b+tree非叶子节点只存储key值和指针,节省空间,降低了树的高度,提高了查询速度。
聚类索引和辅助索引
聚类索引的b+tree数据data值为真实的data,key值为主键;而辅助索引的data为聚类索引的key值,即主键值。如果想要通过辅助索引找数据,需要先在辅助索引中找到主键值,然后再在聚集索引中查找真实数据。