mysql> SHOW TABLE STATUS LIKE 'mod%'\G
*************************** 1. row ***************************
Name: modification
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384 -- one 16KB block for data
Max_data_length: 0
Index_length: 32768 -- two 16KB blocks, one per index
Data_free: 0
...
InnoDB(MySQL 中的默认引擎)为每个表分配单独的“块”。
一个“块”是 16KB,不管操作系统或磁盘控制器有多大。
是的,只有一小行的表“浪费”了大量磁盘空间。但是如果你有一百万行,浪费的百分比会更低。
同样,每个
INDEX
( 的叶节点除外PRIMARY KEY
)将以 16KB 的块为单位使用磁盘。使用它来查看“Data_length”和“Index_length”:
我创建了一个包含 2 个二级索引的表,但尚未在其中放入任何行:
那 3 个块属于那一张桌子;没有分享。