有一条规则我曾经听说过,当为 char 和 varchar 分配存储大小时,您不想执行常规的 4、8、16、32 规则,而是实际使用 3、7、15、31。显然它有一些东西优化存储空间。
有谁知道这个声明是否有效,或者是否有更好的方法在 postgreSQL 中为 char 和 varchar 分配大小?此规则是否仅适用于 postgreSQL 或在所有 SQL 语言中都要牢记的内容?
最佳答案
您记错了适用于更低级别的内容。
“C”语言中的字符串以零字节结束。所以:“你好”传统上会占用六个字节。当然,那是在每个人都认为单个字符可以整齐地放入单个字节的时候。不再是这样了。
另一种(主要)存储字符串的方法是在前面存储长度,然后在后面存储字符。碰巧这就是 PostgreSQL 所做的,我相信它甚至进行了优化,因此长度不会占用短字符串的太多空间。
还有一些单独的问题,内存访问在 2/4/8 字节边界(取决于机器的年龄)更便宜/更容易,内存分配在 2 的幂(1024、2048、4096 字节)时更有效).
对于 PostgreSQL(或任何主要的脚本语言/Java),只需担心准确地表示您的数据。大约 99% 的时间,繁琐的低级优化是无关紧要的。实际上,即使您是用“C”编写的,在需要时也不必担心。
关于postgresql - PostgreSQL 存储对 char 和 varchar 使用 2^n-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862118/