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

noc*_*ura 4 database string performance

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

---------------------------------------------
| Name    |  FavoriteFood                   |
---------------------------------------------
| Alice   | Pizza                           |
| Mark    | Sushi                           |
| Jack    | Pizza                           |
---------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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

编辑:我们事先不知道最喜欢的食物是什么:它们是用户提供的。字符串表的编程接口类似于......

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

所以字符串表似乎更有效,但是现代数据库是否已经在后台这样做了,所以我可以只做简单的单表方法并且高效?

Tyl*_*nry 5

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