我有一个启用了utf8mb4的mariadb(版本10.2.10)表。 varchar(120)列jobID唯一标识该行。目前,我正在使用长度为60个字符的jobID(将来可以选择增加)。所以,我把它变成了主键。
现在,我有60K的记录。因此,当我使用detail given here检查datafile + indexfile的大小时,它的数据文件大小几乎等于indexfile。因此,当数据文件因为我声明的主键而上升时,索引文件以1:1的速度上升。
所以,我开始考虑添加一个整数自动增量主键,如here所述,并将jobID列作为唯一键。但是随着数据文件的索引文件以1:1的比例上升,以及随着表的大小的增加,表中新插入的性能降低(该表将在未来几天内有2000万条记录)的问题让我感到困惑。什么应该是正确的方法?提前谢谢。
我现在的创建表。
SplittableRandom
答案 0 :(得分:1)
根据定义(在MySQL中)PRIMARY KEY
是UNIQUE
。听起来你有这个:
CREATE TABLE ...
...
PRIMARY KEY(jobID),
UNIQUE(jobID) -- redundant, and a waste of space; DROP it.
...
在InnoDB中,数据和PK共存("聚集")。但每个"中学"密钥占用更多空间。
如果这不能解释,那么......在没有看到SHOW CREATE TABLE
的情况下无法回答。示例jobID是什么样的?
根据辅助密钥的数量及其含义,我可能会建议使用AUTO_INCREMENT
PK 。