将十六进制值存储为字符串或整数?

Wil*_*yor 5 performance index

我继承了一个使用 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 万个对象。

Bry*_*gee 5

我建议使用 BINARY 类型;字符串浪费大量空间,整数需要转换。

http://dev.mysql.com/doc/refman/5.0/en/binary-varbinary.html

另一方面:为什么需要关联表?如果对象和指纹是 1 比 1,您可以将它们直接存储在对象表中,或者只有一个带有 id、指纹和对象 id FK 的表。