我正在设计一个数据库(SQLite,SQL Server和DB2),其中一个表包含一个必须唯一的32kB blob。该表通常包含大约20,000行。
我可以想到两个解决方案,
1 - 使blob成为唯一索引。
2 - 计算blob的哈希索引,将其用作非唯一索引,并编写强制blob唯一性的代码。
解决方案1更安全,但存储空间开销和性能损失是否足以使解决方案2成为更好的选择?
答案 0 :(得分:1)
我会选择#2,部分原因是节省空间的措施,但更多是因为某些DBMS不允许LOB上的索引(想到了Oracle,但这可能是旧的限制)。
我可能会为哈希值创建两列,MD5和SHA1(在客户端语言中通常都支持)。然后添加一个涵盖这两列的唯一组合索引。两个哈希发生碰撞的可能性极小,特别是考虑到您预期的桌子尺寸。但是,您仍然应该有一个恢复策略(可能就像将其中一个值设置为0一样简单。)