使用 IBM DB2 9.7,在 32k 表空间中,假设 10000b(一万字节)长的列非常适合表空间。这两者之间有区别吗?一个优于另一个?
VARCHAR(10000)
CLOB(536870912) INLINE LENGTH 10000
在功能和性能方面是或首选?快速浏览一下两者会发现 CLOB 实际上更通用。所有小于 10000 的内容都存储在 stablespace 中,但是如果需要更大的内容,那也没关系,它只是存储在磁盘上的其他位置。
特殊限制适用于导致 CLOB 数据类型的表达式和结构化类型列;此类表达式和列不允许用于:
- 前面有 DISTINCT 子句的 SELECT 列表
- GROUP BY 子句 ORDER BY 子句 UNION ALL 以外的集合运算符的子选择
- 基本的、量化的、BETWEEN 或 IN 谓词
- 聚合函数
- VARGRAPHIC、TRANSLATE 和日期时间标量函数
- LIKE 谓词中的模式操作数,或 POSSTR 函数中的搜索字符串操作数
- 日期时间值的字符串表示形式。
所以如果你需要做任何这些事情,VARCHAR
是首选。
我没有关于性能的明确答案(不幸的是,像这样的信息似乎并没有出现在文档中——或者至少,它不容易找到)。但是,从逻辑上讲,数据库与CLOB
. 它必须决定是否CLOB
直接在结果中返回。这至少意味着一些开销。这是对一些问题的很好的讨论,尽管它也没有给出关于性能的明确答案。
我的默认位置是使用VARCHAR
,除非CLOB
确实需要(列中的数据可能大于VARCHAR
限制)。