在那里谷歌搜索似乎是混合报告VARCHAR2
Oracle 中列的大小是否影响性能。
我想VARCHAR
稍微扭曲一下大小的问题,并希望对此有所了解:
给定要存储在(Oracle)数据库中的(多行)自由文本字段(不是名称之类的短内容),在不最大化VARCHAR
容量(VARCHAR2(4000)
在 Oracle 上)但选择较小的值,例如 1024 或 512,因为无论如何这在 98% 的情况下可能就足够了。
在那里谷歌搜索似乎是混合报告VARCHAR2
Oracle 中列的大小是否影响性能。
我想VARCHAR
稍微扭曲一下大小的问题,并希望对此有所了解:
给定要存储在(Oracle)数据库中的(多行)自由文本字段(不是名称之类的短内容),在不最大化VARCHAR
容量(VARCHAR2(4000)
在 Oracle 上)但选择较小的值,例如 1024 或 512,因为无论如何这在 98% 的情况下可能就足够了。
它确实会影响内存使用,尤其是当客户端程序必须分配足够的内存来接收数据集时。
请记住,许多应用程序(尤其是 Web 应用程序)使用 UTF-8,它是一种多字节字符集。因此,您应该真正考虑字符而不是字节。
如果我期待超过一千个字符,那么我会积极考虑使用 CLOB。我会考虑它是否会存储纯文本或某种形式的标记(wiki / html?),与非欧洲语言一起使用。例如,这里的问题和答案是 CLOB,但注释可以放在 VARCHAR 中。
如果你最大限度地使用 VARCHAR,那么在六个月内有人会想要让它再次变大,而你会因为不使用 CLOB 而自责。
通常没有性能考虑因素,尽管有一些对您来说可能很重要的问题。a 的限制
varchar
应该被视为与任何其他限制一样的约束——它在那里执行业务规则。IMO 您应该问的问题是“我是否要防止存储在此字段中的自由文本数据长于n
varchar(512)
字节/字符”-这是在和之间进行选择时的唯一决定因素varchar(4000)
。请注意,我假设您正在谈论
varchar
SQL 类型 - 情况有所不同,pl/sql
选择长度对于内存分配的原因可能至关重要。如果较小的值适用于 98% 的情况,但需要 Varchar2(4000) 才能适用于 100% 的情况,那么您别无选择,只能使用较大的值。为 2% 的值创建一个单独的表,然后协调插入/选择等会增加复杂性,从而消除不扩展字段带来的任何内存或性能优势。