散列查找表主键

时间:2016-04-05 15:40:14

标签: sql postgresql

我必须使用一组$ string,md5($ string)CSV文件填充数据库,本质上是一个哈希查找表。

我的问题是:  我应该将字符串用作主键吗?哈希?添加额外的ID列?

我认为哈希会很好,因为那就是我要问的数据库,但是哈希可能会发生碰撞,但是字符串应该是唯一的(为了节省空间)但是我想要第二个意见。

考虑到性能,我会考虑至少35GB的数据。所以任何建议都值得赞赏

2 个答案:

答案 0 :(得分:0)

如果该字符串将用于外键引用,那么我不会(必然)推荐散列。你可以:

  • 创建一个串行(自动递增)的id列作为主键。
  • name上创建唯一索引。

这应该有助于在表格中进行查找以及验证name是唯一的。对于外键引用,使用固定长度的数字比使用可变长度字符串更好。

如果您使用哈希值并且实际上不需要重复项,那么您需要一些机制来区分具有相同哈希值的不同字符串。一个自然的选择是某种增量计数器 - 但这会让你非常接近解决方案只有计数器和没有哈希。我本身并不认为在表中存储这样的哈希值的优势。

答案 1 :(得分:-1)

我最终使用了SERIAL id字段,所以我可以计算我有多少次。

最初的问题开始了,因为我认为你只使用PRIMARY KEY索引列。

现在问题解决了,我只是正确索引,性能很棒!