0

我经常要处理可能只假设几个值的数据。我认为 Oracle 应该使用 16 个字节来保存 VARCHAR2(16) (在索引或表上)。

我可以使用 FK,但这意味着 Oracle 检查另一个表上是否存在值。我更喜欢只使用计算和 RAM。而且它的可读性较差。

如果我用数字或枚举或 CHAR(1) 替换 VARCHAR2(16),我只会浪费 1 到 4 个字节。当我有 400 万行时,它可能有助于避免浪费空间。它会对性能产生重大影响吗?

我还想象一个场景,可以在我的索引中的 4° 位置使用字段(它不是选择性的。我想我只会使用一些)。

4

1 回答 1

2

在我看来,您正在优化错误的东西。

假设您的表中有 400 万行,并且您设法通过使用 NUMBER 或 CHAR(1) 字段平均每行节省 10 个字节的存储空间,这更难理解但占用的存储空间更少。您节省了整整 40 兆字节!呜呼!!!以当前的存储价格计算,这 40 兆字节……完全无关紧要。

你说的是用便士衡量的储蓄。某人试图找出您的 ENUM、CHAR(1) 字段的含义或 NUMBER 字段的正确解释所花费的时间以美元为单位。例如,如果承包商每年需要一分钟来理解压缩字段(“嗯……'O' 状态是指打开还是缺货……或者是零……零又意味着什么?”),以每小时 120 美元的咨询费率计算,您已经花费了更多 (2 美元) 来尝试找出压缩字段,而不是存储在存储上。

您的建议在 1970 年代(我记得很清楚,谢谢)那个存储昂贵且不充足的时代非常有意义 - 您保存了所有可能的字节,压缩字段,使用了 2 位数的年份(记住那些,任何人? :-),并使用了所有可以节省空间的技巧。现在的存储很便宜而且很丰富。我有可用的网络驱动器,以 TERABYTES 为单位!花费开发人员的时间来节省相对微量的存储空间在“试图解释结果所花费的时间”方面是浪费的,这导致“所涉及的时间花费了美元”。尽可能清楚地拼写出事情,并使事情尽可能容易解释。YMMV。

于 2012-07-13T11:17:46.663 回答