MYSQL - int 还是短字符串?

标签 mysql sql

我要创建一个表,其中的行数在 1000-20000 之间,并且我的字段可能会重复很多...大约 60% 的行将具有此值,其中大约每 50-100 人都有一个共同的值(value)。

我最近一直担心效率问题,我想知道是将这个字符串存储在每一行(它会在 8-20 个字符之间)还是创建另一个表并将它们与其代表 ID 链接会更好相反......所以在这个表中有 ~1-50 行用整数替换大约 300-5000 个字符串?

这是一个好方法,还是有必要?

最佳答案

是的,在大多数情况下这是一个很好的方法。这称为规范化,主要出于两个原因:

  • 删除重复数据
  • 避免重复实体

我无法从你的问题中判断出你的情况是什么原因。

两者之间的区别在于,第一个重用恰好看起来相同的值,而第二个连接具有相同含义的值。实际的区别在于如果一个值发生变化应该发生什么,即如果一个记录的值发生变化,值本身应该改变以便所有其他记录也使用它发生变化,或者该记录应该连接到一个新值所以其他记录保持不变。

如果是第一个原因那么你会节省数据库空间,但是更新记录会更复杂。如果是出于第二个原因,您不仅可以节省空间,还可以降低不一致的风险,因为值只存储在一个地方。

关于MYSQL - int 还是短字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299796/

相关文章:

mysql - 在 Google Cloud Platform 上设计一个 PolyGlot 数据库

php - laravel 在插入一行后无法检索 ID

mysql - 创建一个 mysql View ,其中包含 1 个字段,获取两个数据

MySQL 多表子查询

mysql - 使用@variable 将 MSsQL 转换为 MySql 存储过程

mysql - 如何检索两个表中不常见的行

sql - 在 exec 中声明变量会改进 SQL 查询计划吗?

sql - MSSQL 2012 - 查找列包含以下数字的行

python - 如何将此 Python 代码转换为 ColdFusion 代码?

sql - 如何在sqlite中按连续行进行分组?