1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update MySQL.md

This commit is contained in:
Snailclimb 2018-09-05 18:51:31 +08:00 committed by GitHub
parent a0a5234fc8
commit 29666cc2f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,9 +45,9 @@ Java面试通关手册Java学习指南欢迎Star会一直完善下去
  Mysql的BTree索引使用的是B数中的B+Tree但对于主要的两种存储引擎的实现方式是不同的。
  **MyISAM:** B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候首先按照B+Tree搜索算法搜索索引如果指定的Key存在则取出其data域的值然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。
  **MyISAM:** B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候首先按照B+Tree搜索算法搜索索引如果指定的Key存在则取出其 data 域的值,然后以 data 域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。
  **InnoDB:** 其数据文件本身就是索引文件。相比MyISAM索引文件和数据文件是分离的其表数据文件本身就是按B+Tree组织的一个索引结构树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引或聚集索引”。而其余的索引都作为辅助索引辅助索引的data域存储相应记录主键的值而不是地址这也是和MyISAM不同的地方。**在根据主索引搜索时直接找到key所在的节点即可取出数据在根据辅助索引查找时则需要先取出主键的值在走一遍主索引。** **因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。** PS整理自《Java工程师修炼之道》
  **InnoDB:** 其数据文件本身就是索引文件。相比MyISAM索引文件和数据文件是分离的其表数据文件本身就是按B+Tree组织的一个索引结构树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引或聚集索引”。而其余的索引都作为辅助索引(非聚集索引)辅助索引的data域存储相应记录主键的值而不是地址这也是和MyISAM不同的地方。**在根据主索引搜索时直接找到key所在的节点即可取出数据在根据辅助索引查找时则需要先取出主键的值在走一遍主索引。** **因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。** PS整理自《Java工程师修炼之道》
详细内容可以参考: