首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    InnoDB 行超长时怎么选择溢出字段?

    创建表时,InnoDB 会问自己一个问题: 如果我放过这条 DDL 语句,让它建表成功,以后对这个表进行插入、更新操作时,有没有可能因为记录超长导致操作失败?...在这个规则之下,再来计算留在索引页中的记录内容长度,看看是不是还会超长?...如果还会超长,InnoDB 是不会放过这条 DDL 语句的,这时,建表就会失败,并且报如下错误: 1118 - Row size too large (> 8126)....为啥判断超长的条件是大于 8126 字节呢?先别急,后面会有介绍。 如果不会超长,自然就会建表成功了。 2. 索引页长什么样?...怎么判断行超长了? 通过上一小节,我们知道一个索引页初始化完成之后,会占用 132 字节的空间。

    1.6K31

    记录超长 – Long Row – 2665 – 达梦数据库

    Long Row = 允许一行数据超长 达梦默认:一行数据不能超过 “页大小的一半” 开启 LONG ROW 之后:这张表不再严格限制单行总长度,超长的字段会自动放到行外面存,只留一个指针在行里。...大白话: 本来一行必须塞进半页里,现在允许 “一部分数据挂在行外面”,表就不会报 “记录超长”。 为什么需要 Long Row?...满足下面任意一条,就应该开: ① 你遇到了这个错误 记录超长 -2665 错误 Data too long for row ② 表字段长度总和接近 / 超过半页上限 页大小 单行最大安全长度 8K 约...开启后能解决报错,但有代价,你必须知道: ① 性能变差 长数据存在行外,需要多一次 IO 读取 查询长字段会比普通行内字段慢 ② 不能随便建索引 超长字段不能建普通索引(会报索引超长) 只能用全文索引...④ 只对当前表生效 不是一开全局生效,每张容易超长的表都要单独开。

    82310
    领券