有一条规则我曾经听说过,在为char和varchar分配存储大小时,你想要实际使用3,7,15,31而不是常规的4,8,16,32规则。显然它有一些东西与优化存储空间有关 有谁知道这个语句是否有效还是有更好的方法在postgreSQL中为char和varchar分配大小?这个规则只适用于postgreSQL或所有SQL语言中要记住的东西吗?
答案 0 :(得分:1)
你错误地记住了适用于更低层次的东西。
“C”语言中的字符串以零字节终止。所以:“你好”传统上需要六个字节。当然,当每个人都认为单个字符整齐地适合单个字节时,就会回来。不再是这种情况了。
存储字符串的另一种(主要)方法是将长度存储在前面,然后使用下面的字符。正如PostgreSQL所做的那样,我相信它甚至有一个优化,因此长度不会占用短字符串的空间。
还有一些单独的问题,内存访问在2/4/8字节边界处更便宜/更容易(取决于机器的使用年限),并且内存分配在2的幂(1024,2048,4096字节)中可以更有效)。
对于PostgreSQL(或任何主要的脚本语言/ Java),只需要担心准确地表示数据。大约99%的时间是低级别的优化是无关紧要的。实际上,即使你用“C”写作,也不要担心它,直到你需要。