2009-04-16 22 views

回答

6

你期望有很多重复的字符串吗?如果不是,那么正常化将不会产生任何结果。如果是的话,那么你拥有的重复就越多,索引变得越不有效。 (因为具有相同索引的所有项目必须检索)

如果你的数据库引擎支持它,你可以简单地设置字符串作为一个聚集索引,在这种情况下,相似的字符串将被储存在彼此。

而且如果你已经有两个列的索引,并比较两者,您收到的指数的全部好处。

+0

如何设置为聚簇索引? – zsharp 2009-04-16 04:54:14

1

这实际上听起来很容易测试。

你可以设置表两种方式,产生的100,000个随机行,运行对阵双方一些查询,看看哪个更快。

2

如果您确实需要字符串值,那么答案是否定的。

比较一个数据库中的字符串是不是比较一个int,然后查找从INT字符串便宜。

至于字符串的重复,你有更多的重复,那么你就需要,如果他们非规范化的存储空间更少。但它仍然会变慢。

如果您正在寻找在存储性能,然后用字符串,整数PK坚持。

0

如果您使用的是Oracle,您不妨探讨使之成为一个索引组织表COMPRESS 1

Oracle docs

指定压缩到使关键 压缩,从而消除重复 索引组织表中的主键列 值的发生。使用 整数指定前缀长度, 这是要压缩的前缀列数 。

0

指标进行快速搜索可能的。但是请记住,如果数据库知道所有最重要的字段,则只能使用该索引。例如,如果你有一个索引:

int, string 

则数据库可以使用索引来搜索一个int,或者用于int和字符串的组合。但它不能用它来搜索一个字符串。

如果创建两个单独的索引:

index 1: int 
index 2: string 

则数据库可以有效地为int和/或搜索字符串。

您是否对表格进行规范化并不重要。规范化通常会减慢搜索速度,因为它会强制查找不同的表。

1

该表已标准化。

将字符串更改为int不是进一步的规范化。

这可能看起来很挑剔,但“正常化”这个词已经被过度使用到了它变得毫无意义的地步。