作为 PL/SQL 的初学者,我对 Oracle LOB 的最小大小的理解存在问题。网上有很多相互矛盾的信息,包括Oracle本身的官方文档...据我了解,一个LOB如果数据较少,不会消耗整个4GB的空间,但是有最小值吗?例如,如果一个 LOB 仅包含一个字符,那么它需要多少空间? 提前非常感谢!
PS。我读了很多Oracle文档和论坛,但我发现只有一些关于块的不清楚的提及,而一个块的最小大小也没有指定。如果 LOB 没有最小大小,那么使用它们作为通用数据类型而不是其他数据类型是否存在任何问题(与内存消耗相关)?
最小块大小是表空间的块大小。
但是,默认情况下,
LOB
存储在行内,与行的其余数据一起存储在块中,除非它们超过长度阈值,此时它们存储在行外在其自己的专用段中最小分配一个块,默认(且不能小于)您的块大小(例如 8K、16K 等)。但块不参与行内存储。一个字符 LOB
将位于行内,因此仅使用 1 个字节(如果 1 字节字符加上任何列开销,可能至少是一个长度字节;简单的块转储将提供准确的答案)。
但不要因此说服您在不需要的地方使用
LOB
。如果您打算存储的文本不超过 4KB,请不要使用 LOB
- 与 varchar2
相比,它们会使获取和其他处理变得复杂并减慢速度。