mysql细节知识

b-树和b+树的区别

可以看出B+树可以放更多的数据,因为非叶子结点都是放的key+指针,不包括数据。假如一个页的大小是16kb,数据的大小是1kb,那么一个页能放的数据大概是16个。

先算第一层,假如指针+key大约为10字节,那么,一个页能放的个数为16*1024/10 ~= 1638 

第一层就能放1638个,那么第二层呢,能放多少个呢,因每个页结点都能放1638,那么第二层能装的数据大小1638*1638,延展到第三层,

每页能放16个数据,那么最终能放的数据为:16*1638*1638~=42,928,704 4千多万个吧,那么显然,增加pageSize的大小,就能裝更多的数据。

mysql  设置页大小的参数:innodb_page_size=32K

 

 

1、数据迁移的时候需要删除索引,不然迁移的效率很低,因为没迁移一条数据会维护它对应的索引。

 

2、索引与B+树。

好的,用户现在在问关于MySQL InnoDB中一张表有一个聚簇索引和两个二级索引对应的B+树结构是怎样的。我需要详细解释清楚每个索引对应的B+树结构,以及它们之间的关系。

首先,用户之前已经问过关于页大小和索引的问题,可能对B+树有一定了解,但需要更深入的结构说明。用户可能正在设计数据库结构,或者优化查询性能,需要理解索引的物理结构来做出更好的决策。

我需要先确认聚簇索引和二级索引的区别。聚簇索引的叶子节点存储的是数据行,而二级索引的叶子节点存储的是主键值。每个索引都是独立的B+树,因此三个索引对应三个B+树。

接下来,需要详细描述每个B+树的结构。聚簇索引的结构,主键是如何组织的,叶子节点和数据行的关系。然后是两个二级索引的结构,它们的键值组成,以及叶子节点如何指向主键。可能需要用例子来说明,比如一个具体的表结构,比如用户表,有id作为主键,name和age作为二级索引。

还要注意页的结构,每个节点对应一个页,非叶子节点存储键值和指针,叶子节点存储数据或主键值。可能需要提到页分裂和合并的过程,但用户的问题主要是结构,不是操作细节。

需要确保用户理解为什么二级索引需要回表查询,以及为什么索引的数量会影响写操作的性能,因为每次插入都要更新多个B+树。

可能还需要图示,但文本描述需要足够清晰。例如,聚簇索引的B+树叶子层是数据页,二级索引的叶子层是主键值,这样在查询时通过二级索引找到主键,再通过聚簇索引找到数据行。

最后,总结三个B+树的关系,强调每个索引独立维护,以及它们如何协作。可能还要给出优化建议,比如避免过多索引,使用覆盖索引等。

 

和数据一起存的索引叫聚簇索引,就是存在叶子结点那个。B-树也叫多叉树。 

 

posted on 2025-04-01 23:16  Hi Martin  阅读(9)  评论(0)    收藏  举报