每日一面
本问题参考: https://www.zhihu.com/question/410506694/answer/1368215298 ,答案为个人原创 MySQL innoDB引擎索引基于 B+树,B+树有以下特点: 图片参考自: 链接 每个节点中子节点的个数不能超过 N,也不能小于 N/2(不然会造成页分裂或页合并) 根节点的子节点个数可以不超过 m/2,这是一个例外 m 叉树只存储索引,并不真正存储数据,只有最后一行的叶子节点存储行数据。 通过链表将叶子节点串联在一起,这样可以方便按区间查找 同时,InnoDB主键索引和非主键索引不一样。主键索引,叶子节点是行所有数据,非主键索引叶子节点只是这一列的数据以及指向主键的指针,如果需要其他列数据则需要通过主键指针查询聚簇索引。 然后,就需要提到一个概念, innodb_page_size 。InnoDB引擎读取数据, 是一页一页读取的 ,这是InnoDB读取一页数据的大小。 innodb_page_size 是一个初始化数据库实例的参数,在目前的版本中(>=5.7.6),可以选择的值有 4096, 8192, 16384, 32768, 65536 。 默认是16KB 一般越小,内存划分粒度越大,使用率越高,但是会有其他问题,就是限制了索引字段还有整行的大小。innodb引擎读取内存还有更新都是一页一页更新的,这个 innodb