我试图从存储和性能角度了解决定 varchar 列应该有多大的最佳方法。
性能
从我的研究来看,似乎varchar(max) 只应在您确实需要时使用;也就是说,如果该列必须容纳超过 8000 个字符,一个原因是缺乏索引(尽管我对一般的 varchar 字段的索引有点怀疑。不过,我对 DB 原则还很陌生,所以也许这是没有根据的) 和压缩(更多的是存储问题)。事实上,一般来说,人们似乎只推荐使用你需要的东西,当做 varchar(n)....oversizing 是不好的,因为查询必须考虑到最大可能的大小。但也有人表示,引擎将使用指示大小的一半作为数据平均实际大小的估计值。这意味着人们应该根据数据确定平均大小是多少,将其翻倍,并将其用作 n。对于具有非常低但非零可变性的数据,这意味着比最大尺寸大 2 倍,这看起来很多,但也许不是?见解将不胜感激。
存储
在阅读了行内与行外存储的工作原理后,并记住实际存储仅限于实际数据,在我看来,n 的选择实际上对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用 varchar(max) 也不会对存储产生任何影响。相反,如果可能,目标可能是将每个数据行的实际大小限制为 ~8000 字节。这是对事物的准确阅读吗?
上下文
我们的一些客户数据会稍微波动,因此我们通常将这些列的列设置得比它们需要的宽度稍宽一些,比如大 15-20%。我想知道是否还有其他特殊考虑;例如,和我一起工作的人告诉我使用 2^n - 1 个尺寸(不过我没有发现任何证据......)
我说的是初始表的创建。客户会告诉我们他们将开始向我们发送一个新表,并发送示例数据(或只是第一个生产数据集),我们会查看这些数据并在我们的一端制作一个表来保存数据。我们希望在我们的一端制作表格以处理未来的导入以及样本中的内容。但是,某些行肯定会变长,所以我们填充它们。
问题是多少,是否有技术指南?