一、MYSQL规范对大字段的建议
一般来说,MYSQL的开发规范中,会对大字段有拆分的建议,比如:
有text字段的,最好请分表。(本质上说,不是MySQL不适合存储text,而是在太多的情况下我们期望MySQL能够更加高效的提供小数据查询/事务处理)
常见字段类型(一般不允许用text和blob),若必须使用则拆分到单独的表
WHY?我们通过实操验证看看为什么会有这条规范
二、实操验证:
1、 建表
create table cygtest9(id int primary key,age int,name text);
2、 插数据
Insert into cygtest9 values(1,28,'dskjdojwoejohdohdohgosjdijsdniiwwewew');
Insert into cygtest9 values(2,32,'dskjdojwoejohdohdohgosjdijsdniiwdswewew');
3、 UPDATE
Update cygtest9 set age=age+1 where id=2;
4、 查看BINLOG
三、总结
如果不分表,会有什么后果:
从BINLOG可以看到,BINLOW 为ROW FORMAT的时候,UPDATE一个字段要记录整行。生产环境曾经有一张大表,有TEXT大字段,而且经常有UPDATE,实际上UPDATE的并不是TEXT字段,而仅仅是4个字节的SHORT INT,但生成BINLOG时依然是整行数据记录,造成大量的磁盘IO和磁盘空间的浪费。