【问题标题】:mariadb varchar 120 characters primary keymariadb varchar 120 个字符的主键
【发布时间】:2018-05-11 09:56:51
【问题描述】:

我有一个启用了 utf8mb4 的 mariadb(版本 10.2.10)表。有一个 varchar(120) 列 jobID 唯一标识该行。目前,我正在使用长度为 60 个字符的 jobID(将来可以选择增加)。所以,我把它变成了主键。

现在,我有 6 万条记录。因此,当我使用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;

【问题讨论】:

    标签: mariadb


    【解决方案1】:

    根据定义(在 MySQL 中),PRIMARY KEYUNIQUE。听起来你有这个:

    CREATE TABLE ...
        ...
        PRIMARY KEY(jobID),
        UNIQUE(jobID) -- redundant, and a waste of space; DROP it.
    ...
    

    在 InnoDB 中,数据和 PK 共存(“集群”)。但是每个“辅助”键都占用更多空间。

    如果这不能解释它,那么......没有看到SHOW CREATE TABLE就无法回答。示例 jobID 是什么样的?

    根据辅助键的数量和它们的类型,我可能会推荐 foragainst 使用 AUTO_INCREMENT PK。

    【讨论】:

    • 嗨@rick james,我添加了创建表。我只定义了主键。没有定义唯一键。感谢您的回复。
    • 奇怪。 “Index_length”应该保持为 0(或者可能是 16KB)。请提供SHOW TABLE STATUS LIKE 'jobsTable';
    • 嗨里克·詹姆斯。我会再次检查并回来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2021-10-21
    • 2011-03-10
    • 1970-01-01
    • 2018-12-28
    • 2016-09-23
    相关资源
    最近更新 更多