4.8 小结



一、小结

我的理解:共三大部分:

  • 数据结构B+树,的理论模型及InnoDB的具体实现
  • 物理存储结构
  • 指导实际业务:建表时,数据约束

1.1 中心思想

抽象数据结构:B+树,组织起了数据表中的数据,即索引组织表

物理存储结构:存储进磁盘中

巧妙联系:B+树的每一个节点 = 磁盘上的存储的一个页

1.2 图:数据结构与存储结构的巧妙结合

存储结构的一个页是16K,存业务里的一行,能存上万行。

1.3 上述节点与页的结合

下图是InnoDB对B+树这个理论的数据结构,的具体实现:

注意:所有的节点,都叫页。(这里的页,不是叶 :))(每个页是16K,是指所有的节点。)

  • 最上面:根节点
  • 非叶子节点:索引页
  • 叶子节点:数据页

1.4 InnoDB行记录的格式

为什么会发展出来Dynamic?

因为行溢出。

1.5 索引的左侧用法

如果是三个字段的联合索引,可以代替最左侧两个字段的单独索引。

1.6 数据约束

1.7 视图 View

1.8 理论-实践

建表的注意事项,网上一搜一大把。

但是,只有理解了InnoDB的数据结构、存储结构,那些所谓的注意事项,就很好理解。

1.增加每页数据量

因为如果每页的数据量过少,遍历数据表时,会有大量的磁盘IO,效率就低。

比如:订单表,有25个字段。不要把这25个字段放进一张表中,而是把其中经常查的放进第一张表,把不经常查的放进第二张表中。这样查询的表,字段就会尽量少。一个页中能存的行记录数,就会尽可能多。

目的:增加每一页的数据量。不是减少数据的传输量。

磁盘io,顾名思义就是磁盘的输入输出。

2.单行数据不要太大,避免行溢出

只要行溢出,不仅要维护本身数据,还要维护BLOG页。

一旦SELECT *,不仅要把正常字段取出来,还要把BLOG页也取一遍。这影响性能。

3.B+树高度不能太高

如果一个B+树过高,搜索一个数据时,就会从根节点开始往下找,产生更多次的磁盘IO,磁盘IO越多就会越影响数据库查询效率。

影响数据库查询效率最大的是,磁盘IO。

内存存数据,非常快,因为是堆,可以按照地址取。

但是,磁盘不一样,尤其是机械磁盘,因为它要寻址。

4.作业

建表规范,用本章的知识解释下原理。

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 4.8 小结


Follow excellence, and success will chase you.