我有一个使用代码的数据库。每个代码可以是两个字符到十个字符长的任何地方。
在MS SQL Server中,对于这些代码使用char(10)
和使用它们时RTRIM是否更好,或者我应该使用varchar(10)
而不必担心修剪额外的空格?我需要摆脱空白,因为代码将在应用程序逻辑中用于比较,而不是。
至于平均代码长度,很难说清楚。假设所有代码都是1到10之间的随机长度。 修改:对于代码的平均长度,粗略估计约为4.7个字符。
答案 0 :(得分:6)
我投票给varchar。
我说varchar是为了避免TRIM会导致索引使用无效(除非你使用计算列等会破坏目的,不是吗?)。
否则,在10的长度,它将是50/50,但TRIM会向varchar提供平衡,并超过固定长度的利益
答案 1 :(得分:3)
作为一般规则,总是喜欢较小的存储而不是额外的CPU。因为数据库性能的驱动因素始终是IO,较小的数据记录意味着每页更多的记录,这反过来意味着更少的IO请求。处理可变长度所涉及的额外CPU不会成为一个因素。从历史上看,在80年代甚至90年代的黑暗时代,它可能是一个可衡量的因素,但今天只是噪音。因为CPU和内存访问量大大增加,但IO速度一直保持不变。这就是今天“旧书”建议不适用的原因。除非你有像char(2)或类似的常量字段,否则只需使用varchar。
答案 2 :(得分:2)
我相信你无法分辨两者之间的速度差异。
答案 3 :(得分:1)
您的要求是需要使用varchar的人的教科书定义。
如果您想担心性能问题,请担心数据库设计和编写好的SQL。 Char vs VarChar内部结构由数据库供应商进行了优化。
答案 4 :(得分:0)
在一本旧书中我读到,一般来说,对于大多数记录来说,字符串是一个更好的选择,实际字符串长度至少是最大值的60%;在您的示例中 - 如果超过一半的记录长度为6或更长。否则,请使用varchar。