database - 我应该使用字符串表来提高数据库效率吗?

标签 database string performance

假设您有一个包含单个表的数据库,例如...

---------------------------------------------
| Name    |  FavoriteFood                   |
---------------------------------------------
| Alice   | Pizza                           |
| Mark    | Sushi                           |
| Jack    | Pizza                           |
---------------------------------------------

如果有一个名为“Strings”的附加表来存储字符串,并将 FavoriteFood 列更改为字符串表中的索引,是否会更节省空间。在上面的示例中,“Pizza”看起来像是存储了两次,但是对于附加表,它似乎只存储了一次。当然,请假设有 1,000,000 行和 1,000 个唯一字符串,而不是只有 3 行和 2 个唯一字符串。

编辑:我们事先不知道 FavoriteFoods 是什么:它们是用户提供的。字符串表的编程接口(interface)类似于...

String GetString(int ID) { return String at with Row-ID == ID }

int GetID(String s) {
  if s exists, return row-id;
  else {
    Create new row;
    return new row id;
  }
}

所以字符串表似乎更有效,但现代数据库是否已经在后台执行此操作,所以我可以只使用简单的一张表方法并提高效率?

最佳答案

您衡量效率的依据是什么?假设没有其他数据与每个 FavoriteFood 关联(在这种情况下显然您需要两个表),单表方法可能更省时,因为不必要的连接会产生额外的处理成本。另一方面,双表方法可能更节省空间,因为存储索引比存储字符串占用的空间更少,但这取决于您使用的特定数据库如何优化重复字符串的存储。

关于database - 我应该使用字符串表来提高数据库效率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1024048/

相关文章:

sql - PostgreSQL 哈希索引

asp.net-mvc - 以开源数据库设计作为商业应用的起点

sql - 通用 SQL 查询监听器

c中的字符指针

ios - 在进行选择器调用之前显式检查nil是否有任何好处?

mysql - 如何避免SQL中的嵌套子查询

java - 未使用的基元数组 : what do javac and the JIT compiler do with it?

mysql - 安全触发器 mysql 已被语句使用

java - 在没有 split 方法/数组的情况下,如何在 Java 中从字符串中提取整数并将它们加在一起?

Python YAML 转储指针引用