索引:
在关系数据库中,索引是一种数据结构,他将数据提前按照一定的规则进行排序和组织,能够帮助快速定位到数据记录的数据,加快数据库表中数据的查找和访问速度。
B-树:
在
MySQL
中,
MyISAM
引擎和
InnoDB
引擎都是使用
B+Tree
作为索引结构,但
是,两者的实现方式不太一样。
MyISAM
引擎中,
B+Tree
叶节点的
data
域存放的是数据记录的地址。在索引检索
的时候,首先按照
B+Tree
搜索算法搜索索引,如果指定的
Key
存在,则取出其
data
域的值,然后以
data
域的值为地址读取相应的数据记录。这被称为
“
非聚簇索
引
”
。
InnoDB
引擎中,其数据文件本身就是索引文件。相比
MyISAM
,索引文件和数据文
件是分离的,其表数据文件本身就是按
B+Tree
组织的一个索引结构,树的叶节点
data
域保存了完整的数据记录。这个索引的
key
是数据表的主键,因此
InnoDB
表
数据文件本身就是主索引。这被称为
“
聚簇索引(或聚集索引)
”
,而其余的索引都作
为辅助索引,辅助索引的
data
域存储相应记录主键的值而不是地址,这也是和
MyISAM
不同的地方。在根据主索引搜索时,直接找到
key
所在的节点即可取出数
据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。 因此,在
设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主
键,这样会造成主索引频繁分裂。
区别:
InnoDB的辅助索引data域存储相应记录主键的值而不是地址InnoDB的数据文件本身就是主索引文件MyISAM的索引和数据是分开存储的。
B 树& B+树两者有何异同呢?
B 树的所有节点既存放键 (key) 也存放 数据 (data) ,而 B+ 树只有叶子节点存放 key 和data ,其他内节点只存放 key 。B 树的叶子节点都是独立的 ;B+ 树的叶子节点有一条引用链指向与它相邻的叶子节点。B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+ 树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。


