我要创建一个表,其中的行数在 1000-20000 之间,并且我的字段可能会重复很多...大约 60% 的行将具有此值,其中大约每 50-100 人都有一个共同的值(value)。
我最近一直担心效率问题,我想知道是将这个字符串存储在每一行(它会在 8-20 个字符之间)还是创建另一个表并将它们与其代表 ID 链接会更好相反......所以在这个表中有 ~1-50 行用整数替换大约 300-5000 个字符串?
这是一个好方法,还是有必要?
最佳答案
是的,在大多数情况下这是一个很好的方法。这称为规范化,主要出于两个原因:
- 删除重复数据
- 避免重复实体
我无法从你的问题中判断出你的情况是什么原因。
两者之间的区别在于,第一个重用恰好看起来相同的值,而第二个连接具有相同含义的值。实际的区别在于如果一个值发生变化应该发生什么,即如果一个记录的值发生变化,值本身应该改变以便所有其他记录也使用它发生变化,或者该记录应该连接到一个新值所以其他记录保持不变。
如果是第一个原因那么你会节省数据库空间,但是更新记录会更复杂。如果是出于第二个原因,您不仅可以节省空间,还可以降低不一致的风险,因为值只存储在一个地方。
关于MYSQL - int 还是短字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299796/