我有一个启用utf8mb4的mariadb (版本10.2.10)表。有一个varchar(120)列jobID,它唯一地标识行。目前,我使用的是长度为60个字符的jobID (可选择在将来增加)。所以,我把它变成了主键。
现在,我有60000张唱片。因此,当我使用detail given here检查数据文件+索引文件的大小时,它作为数据文件大小的出现几乎等于索引文件。因此,由于我声明的主键,当数据文件上升时,索引文件正在上升1:1。
因此,我开始考虑添加一个整数自动增量主键(如讨论的here ),并将jobID列作为唯一键。但是索引文件随着数据文件的增加而增加1:1的问题,以及随着表大小的增加,新插入到表的性能下降(表在未来几天内将有2000万条记录),使我感到困惑。正确的方法应该是什么?提前谢谢。
我现在创造的桌子。
CREATE TABLE jobsTable (
`jobId` varchar(100) NOT NULL,
`status` varchar(15) NOT NULL,
`addedTime` varchar(13) NOT NULL,
PRIMARY KEY(`jobId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;发布于 2017-11-29 20:10:33
根据定义,PRIMARY KEY (在MySQL中)是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。
https://stackoverflow.com/questions/47523177
复制相似问题