我正在从一个提供 256 位(64 字符长度)字母数字字符串的表中散列键,我打算在第二个表中用作外键。
这里选择的引擎是 InnoDB。
使用我的唯一密钥 256 位密钥,表 A 中有大约 200 万个条目。
具有 700 万条记录的表 B 与具有 256 位外键的表 A 相关。
我的问题是,而不是 64 字符。长度密钥,我应该选择 160 位(40 位)密钥吗?
我会看到性能大幅提升吗?还是差别不会太大?
我的机器计算能力有限,虽然脚本和编程很容易,但我需要几个小时才能从 256 计算和重新计算 160 位,这就是我提出问题的原因。
大的 PRIMARY KEYs 和 UNIQUE KEYs 对于 InnoDB 来说是一个非常糟糕的主意。如果您想在后续检索中真正提升性能,则必须使用较小的 PRIMARY KEY。为什么?
这是您应该使用 64 字符键执行的操作
STEP01) 为 64 个字符的键创建一个键表
从一个包含 64 个字符的键的表开始,并将它与一个自动递增的字段相关联
STEP02) 创建一个存储函数以获取 64 字符键的数字 ID
首先,创建 SQL 以插入 64 个字符的键,然后检索数字 ID
现在采用这个简单的检索算法并将其放入存储函数中
展望未来,只需为每个 64 个字符的密钥生成一个数字无符号 ID(4 个字节)。
这是我过去在 DBA StackExchange 中关于其他大型 PRIMARY KEY 问题的两篇文章
Dec 22, 2011
:文件名作为主键?Oct 18, 2012
: MySQL:对大列的唯一约束