我继承了一个使用 32 字节十六进制字符串集来尝试唯一标识对象的数据库。每个字符串称为一个指纹,每个对象最多可以有 20 个指纹。
我正在跨服务器迁移数据库,我注意到重新填充指纹表需要几个小时。似乎每个指纹都有一个整数 id 并存储为 varchar,指纹列上有一个索引,因此插入速度很慢。
我的问题是:重构这个设计并完全移除指纹表是否值得我花时间?我猜想对数字而不是字符串进行索引会更快,这是正确的吗?
如果设计看起来像这样:(希望这是有道理的)
Object(1,*)<----->(*,*)ObjectFingerprint(*,*)<------>(1,*)Fingerprint
id object_id id
fingerprint_id fingerprint
Run Code Online (Sandbox Code Playgroud)
最好使用:
Object(1,*)<----->(*,*)Fingerprint
id object_id
fingerprint
Run Code Online (Sandbox Code Playgroud)
我正在使用带有 INODb 表的 MySQL 服务器,并且我有大约 140 万个对象。