informix中lvarchar类型设计用于存储中度长度的字符数据(短的常用varchar类型、特别长的字符可用text类型)。其默认长度2048byte,最大长度32739byte,是一种可变长度的字符类型。其性能和稳定性相对较好,但有一缺点:一旦表结构中包含lvarchar类型,则后续对其结构的变更性能将异常的低。故对于数据量较大的表(千万级以上)不推荐使用此类型!
例子
- informix版本:11.5
-
表数据量:4700W
表中原包含两个lvarchar类型字段:
create table lp_evaluation_part (
......
esti_remark lvarchar(2000),
appr_remark lvarchar(2000),
......
);
更改表结构的sql:
alter table lp_evaluation_part add retail_Price DECIMAL(14,2),
add supply_Price DECIMAL(14,2),
add eval_Push_No INT default 0,
add appr_Push_No INT default 0;
此sql执行时耗整体耗时:123分钟,后为测试验证将两个lvarchar类型的字段删除后重新执行此sql耗时:7秒。
解决方式
数据量大的表应尽量避免使用lvarchar类型,若因业务实际情况必须使用,则尽量将其拆分出一张字表。此字表存一些非核心的数据及lvarchar类型数据。这样主表结构变更时不会因为lvarchar类型影响效率。