NULLを許容するカラムをつくるとそれぞれのカラムで必要なストレージサイズが1byte増えていた。
以下はexplainでkey長を見てみた様子。 INTは4byteを確保する訳だけど、NULL (DEFAULT NULL)指定したら各カラムで1byte増えているのがわかる。
NULLABLEかの判定に1bit使っていて、丸められて1byte使っているとしたらNULLABLEなカラムがN個あるとして(N/8+1) byte余計に使うかと思ったらそれぞれのカラムで1byte増えてた。。。(idx8, idx9はその境界値が出たりしないかと思って作った)
mysql> CREATE TABLE `t7` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `c1` int DEFAULT NULL,
-> `c2` int DEFAULT NULL,
-> `c3` int DEFAULT NULL,
-> `c4` int DEFAULT NULL,
-> `c5` int DEFAULT NULL,
-> `c6` int DEFAULT NULL,
-> `c7` int DEFAULT NULL,
-> `c8` …[さらに読む]