一、索引
1、MySQL是如何实现索引机制的?
B+树索引、Hash索引、全文索引。
2、InnoDB索引和MyISAM索引实现的区别?
相同点:
- 都是使用B+树实现的。
不同点:
- 在InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录,而在 MyISAM 中却需要进行一次回表操作,意味着MyISAM中建立的索引相当于全部都是二级索引 。
- InnoDB的数据文件本身就是索引文件,而MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
- InnoDB的非聚簇索引data域存储相应记录主键的值 ,而MyISAM索引记录的是地址。换句话说, InnoDB的所有非聚簇索引都引用主键作为data域
- MyISAM的回表操作是十分快速的,因为是拿着地址偏移量直接到文件中取数据的,反观InnoDB是通过获取主键之后再去聚簇索引里找记录,虽然说也不慢,但还是比不上直接用地址去访问。
- InnoDB要求表必须有主键 ( MyISAM可以没有 )。如果没有显式指定,则MySQL系统会自动选择一个可以非空且唯一标识数据记录的列作为主键。如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整型。
3、如果一个表中没有创建索引,那么还会创建B+树吗?
- 如果指定了主键,会根据主键创建一个聚簇索引。
- 如果没有主键,系统会默认生成隐式的主键,然后创建索引。
4、索引的数据结构
https://blog.csdn.net/G_amazing/article/details/127891769