1

我曾经听说过一条规则,在为 char 和 varchar 分配存储大小时,您希望实际使用 3、7、15、31,而不是执行常规的 4、8、16、32 规则。显然它与优化存储空间。
有谁知道这条语句是否有效,或者是否有更好的方法在 postgreSQL 中为 char 和 varchar 分配大小?这条规则是否仅适用于 postgreSQL 或所有 SQL 语言中要记住的规则?

4

1 回答 1

1

您错误地记住了适用于较低级别的内容。

“C”语言中的字符串以零字节结尾。所以:“你好”通常需要六个字节。当然,那时每个人都认为单个字符可以整齐地放入单个字节中。情况不再如此。

存储字符串的另一种(主要)方法是在前面存储一个长度,然后在后面存储字符。碰巧这就是 PostgreSQL 所做的,我相信它甚至有一个优化,所以长度不会占用短字符串的太多空间。

还有一些单独的问题,即内存访问在 2/4/8 字节边界处更便宜/更容易(取决于机器的使用年限),而内存分配在 2 的幂(1024、2048、4096 字节)时可能更有效。

对于 PostgreSQL(或任何主要的脚本语言/Java),只需担心准确地表示您的数据。大约 99% 的时间,繁琐的低级优化是无关紧要的。实际上,即使你是用“C”写的,也不要担心它,直到你需要。

于 2013-07-25T16:51:08.113 回答