InooDB 单行最大不能超过页大小的一半,比如默认 innodb_page_size=16K,则单行不能超过 8k(要减去一些额外信息占用的大小):
如果包含可变长度类型的字段的行超过InnoDB 最大行大小,则 InnoDB 会选择吧可变长度字段存储到外部页(也叫溢出页),直到该行符合InnoDB 行大小限制:
将上述示例 char 类型改为 varchar 类型,则可以突破单行不能超过 8k的限制:
MySQL层单行最大限制(不区分存储引擎)65535 字节:
BLOB 、 TEXT 列仅对行大小限制贡献 9 到 12 个字节,因为它们的内容与行的其余部分分开存储:
mysql最多可以多少个字段? 答:1024个字段(一般可能没这么多) mysql每行的数据长度最大是多少? 答:8092字节 mysql每个库最多可以有多少个表? 答:20亿个表 mysql的查询速度会被字段数量影响吗?有没有简单点的优化方案呢? 答:肯定会影响的的,不然就不会有垂直分表这一说了 实际上垂直分表不仅仅是把字段按数量分开,还要按类型分开 经常被显示的单独一个表.比如cms新闻系统的标题,摘要,所属分类,缩略图 这些字段不管是在首页的列表还是分类页的列表。是显示频率很高的。 并且这些字段的长度都是有一定的规律的。 基本上不会太长,所以单独一个表。 定长和不定长的字段尽可能的分开。比如文章的正文。 一般情况下在列表页是不会显示的。所以就没必要查询。 可以放到副表中去。 新闻系统的主表中,尽可能的只使用定长字段。比如int 或 char 如果只使用定长字段 速度会有明显的提升。 这是为什么呢? 因为mysql的数据储存在硬盘中, 查询的时候如果你告诉他每个数据的长度, 那么系统就会直接按照长度计算出数据的位置。所以快 如果其中有一列的数据长度是未知的。 系统只能一点点的去找。所以慢。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)