MySQL;InnoDB;索引

在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样。而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同;

存储引擎采用B+树,每一行在磁盘中存储为一个数据块;

每一个索引在 InnoDB 里面对应一棵 B+ 树;

主键索引的叶子节点存的是整行数据;

非主键索引的叶子节点内容是主键的值;

基于非主键索引的查询需要多扫描一棵索引树(回表)。因此,我们在应用中应该尽量使用主键查询。对于某些高频查询,建立联合索引也可以避免回表,但索引的维护是需要代价的,因此需要权衡;

有业务逻辑的字段做主键,则往往不容易保证有序插入,这样写数据成本相对较高;

显然,主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小,所以,从性能和存储空间方面考量,自增主键往往是更合理的选择;

由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段;
 


 


 

你可能感兴趣的:(数据库,mysql,数据库,java)