postgresql - PostgreSQL 存储对 char 和 varchar 使用 2^n-1

标签 postgresql storage

有一条规则我曾经听说过,当为 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/

相关文章:

Android:在存储 SD 卡上组织目录和文件的良好做法?

database - 存储+评估性能数据

php - 用于从 GPS 数据映射路径的 JavaScript 库

javascript - 使用 node 和 sequelize 插入 postgress 数据库时出现无效的错误

ruby sequel gem - 如何使用 pg_array 扩展查询数组

php - pg_query_params 返回错误 : bind message supplies 2 parameters, 但准备语句 ""需要 1

android - 如何获取外部存储 SD 卡大小(已安装 SD 卡)?

android - 如何在 Android 上保存临时数据?

docker - 如何限制容器可用的 Docker 文件系统空间

php - 对 pg_query() 有困难;在 PHP 中