84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
见识到一个java项目,mysql数据库,所有表的主键都是varchar(64)
ringa_lee
varchar相对于int来说占用磁盘空间多,磁盘io也会多,然后内存带宽也会多。这点上尤其在innodb更为明显,innodb表的Secondary index的 leaf page中都要保存primary key的值,主键如果是varchar,会导致secondary index的体积会比较大。而且varchar主键在比较上也会慢一些,插入时容易发送数据的非顺序插入,导致碎片,index tree效率比int低
这是偷懒的表现!
很浪费,且不专业的表现。
如果是char()类型,如值给的是5。那么不管该字段内是否有值,就算null也将占用5×当前数据库编码字节。varchar()则会先用一个字节记录该类型最大范围,如不传值也就记录首字节而已,传至则存储值最大范围内的内容。
null
5×当前数据库编码字节
其余的字段其每条记录占用硬盘体积另说。
楼上说的都很对可能他记录的内容是UUID 很多jsp程序设计库的时候都这样,不知道为什么
varchar相对于int来说占用磁盘空间多,磁盘io也会多,然后内存带宽也会多。这点上尤其在innodb更为明显,innodb表的Secondary index的 leaf page中都要保存primary key的值,主键如果是varchar,会导致secondary index的体积会比较大。而且varchar主键在比较上也会慢一些,插入时容易发送数据的非顺序插入,导致碎片,index tree效率比int低
这是偷懒的表现!
很浪费,且不专业的表现。
如果是char()类型,如值给的是5。那么不管该字段内是否有值,就算
null
也将占用5×当前数据库编码字节
。varchar()则会先用一个字节记录该类型最大范围,如不传值也就记录首字节而已,传至则存储值最大范围内的内容。其余的字段其每条记录占用硬盘体积另说。
楼上说的都很对
可能他记录的内容是UUID
很多jsp程序设计库的时候都这样,不知道为什么