
本页目录 Toggle
Long Row = 允许一行数据超长
LONG ROW 之后:这张表不再严格限制单行总长度,超长的字段会自动放到行外面存,只留一个指针在行里。大白话:
本来一行必须塞进半页里,现在允许 “一部分数据挂在行外面”,表就不会报 “记录超长”。
因为达梦有一个很严格的物理限制:
满足下面任意一条,就应该开:
记录超长
-2665 错误
Data too long for row页大小 | 单行最大安全长度 |
|---|---|
8K | 约 4000 字节 |
16K | 约 8000 字节 |
32K | 约 16000 字节 |
你可以用 SQL 看字段总长
SELECT SUM(DATA_LENGTH)
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME = '你的表名';比如:
这种 100% 要开 LONG ROW。
开启后能解决报错,但有代价,你必须知道:
行外存储机制对频繁修改的超大文本不算友好。
不是一开全局生效,每张容易超长的表都要单独开。
Long Row 是什么:允许行数据超长,自动把部分字段存到行外
Long Row 带来什么问题:性能略降、索引受限、只表级生效
为什么需要:达梦单行限制太严,多几个长文本就超限报错
怎么判断要开:报 -2665 / 字段总长接近半页 / 存大文本
-- 查看页大小(输出单位是K)
SELECT SF_GET_PAGE_SIZE() AS PAGE_SIZE_KB;
-- 输出:32768 表示你是32K的 也就是一行全部字段不得超过16000字符,上文有对照表,自己看
-- 查看你的表是否已启用 LONG ROW
SELECT
OWNER AS "表所属",
TABLE_NAME AS "表名",
STATUS AS "状态",
LONG_ROW AS "是否开启长行"
FROM DBA_TABLES
WHERE TABLE_NAME = 'SomeTable';
-- 开启达梦的长行 Long Row
ALTER TABLE 你的表名 ENABLE USING LONG ROW;
-- 查看表字段长度总和,判断是否超限
SELECT
TABLE_NAME,
SUM(DATA_LENGTH) AS TOTAL_FIELD_LENGTH
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME = 'DOC_REVIEW_ITEM'
GROUP BY TABLE_NAME;免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。