MySQL/Mariadb每记录开销?



mysql/mariadb的每条记录的磁盘开销是多少?(我最感兴趣的是InnoDB,但任何引擎都会很有趣)

假设你有一个

CREATE TABLE tbl (
id BIGINT NOT NULL PRIMARY KEY
);

显然,这将使用至少8字节(BIGINT)每条记录,但它会使用更多的每条记录吗?

开销很大。

  • 每16KB块:几个指针,标志等
  • 每行:大约24个字节的链接,交易的东西等。甚至,如果一行同时被多个事务触及。
  • 每列:1或2字节长度和null。是的,即使是8字节的BIGINT。
  • PRIMARY KEY:这是相当低的,因为PK与数据聚集在一起;它加起来约占整个表格的1%。
  • 辅助键:每个辅助键(INDEX(...))包含指定的列,加上一个PK列的副本。它是一个单独的b树。因此,由于这个原因,可能有多个BIGINT副本占用磁盘空间。
  • InnoDB初始分配16KB块(数据和每个二级索引分开)。之后,它会预先分配更大的块。我认为您的样例表将使用16KB,直到其中有几百行。
  • InnoDB不释放空间回给操作系统。也就是说,如果插入1000行,那么表将扩展为几个块。然后,如果您删除所有的行,磁盘空间不会缩小。

除了索引,bigint的8字节,加上其他列的类似计算可以加起来。但是你必须乘以2到3才能得到InnoDB表所需的磁盘空间。(当然,也有小于2x或大于3x的例外)

我很乐意讨论其他的例子,但我不能非常精确。

相关内容

  • 没有找到相关文章

最新更新