在设计数据库时选择最小的数据类型有多重要?

时间:2010-01-31 16:44:47

标签: mysql database-design

使用tinyintsmallint(适用时)而不只是int有多大差异?或者将char字段限制为所需的最小字符数?

这些选择会影响性能还是仅仅分配空间?

4 个答案:

答案 0 :(得分:7)

在具有非常大的表的“索引”字段上,字段的大小会对性能产生很大影响。在非索引字段上,它仍然不得不写出额外的数据。

也就是说,大表调整大小的停机时间甚至可能是几分钟或几个小时,所以不要让它们比你想象的要小。

答案 1 :(得分:5)

是的,它也影响了性能。

如果索引较大,则从磁盘读取它们需要更长的时间,并且可以在内存中缓存较少的索引。

答案 2 :(得分:2)

我经常看到这三个架构设计缺陷导致问题:

  1. 创建了一个varchar(n)字段,其中n的大小足以容纳设计者所引入的数据样本,而非全局填充:单元测试中的精细,现实世界中的静默截断。
  2. 用于数据固定大小的varchar(n)。这掩盖了数据错误。
  3. 用于可变长度数据的char(n)。这提供了性能改进(通过使数据在光盘上的行中成行,但是所有客户端代码(以及各种存储的过程/视图等)需要应对空白填充问题(并且通常不会)。空格填充可能很难追踪,因为空格不会很好地显示,并且各种库/ sql客户端会抑制它们。
  4. 我从来没有见过一个好心的(即不仅仅为所有cols使用varchar(255)),但保守选择错误的数据大小会导致严重的性能问题。重要的是,我的意思是因子10.我经常看到算法设计缺陷(缺少索引,通过线路发送太多数据等)导致更大的性能命中。

答案 3 :(得分:0)

在某些情况下,两者都有。但是,imo,更多的是设计问题,而不是性能和存储方面的考虑因素。您没有制作所有内容varchar(...)的原因是因为它无法准确反映应该存储哪种数据,并且会降低数据的完整性和类型安全性。