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)
所以字符串表似乎更有效,但是现代数据库是否已经在后台这样做了,所以我可以只做简单的单表方法并且高效?
你用什么来衡量效率?假设没有与每个 FavoriteFood 关联的其他数据(在这种情况下显然您需要两个表),单表方法可能更省时,因为不必要的连接会产生额外的处理成本。另一方面,双表方法可能更节省空间,因为与字符串相比,存储索引所需的空间更少,但这取决于您使用的特定数据库如何优化重复字符串的存储。