【发布时间】:2013-05-02 10:05:31
【问题描述】:
我一直在尝试解决这个问题,但到目前为止还没有运气。
哪个更好:具有复合 PRIMARY KEY 或单个 PRIMARY KEY 和 UNIQUE 索引的表?
我的桌子是这样的:
CREATE TABLE data (
bucket_id INTEGER,
backend_id INTEGER,
unique_id INTEGER,
weight INTEGER,
PRIMARY KEY (bucket_id, unique_id)
) ENGINE=InnoDB
我正在做多个插入。 60 亿多行以
的形式插入到多值插入中INSERT IGNORE INTO data VALUES (x1, x2, x3, x4), (y1, y2, y3, y4), .......)
每行有 500000 行(受客户端限制)。这些都是在应用程序启动时完成的,目前我需要尽可能加快速度。我需要(backend_id,unique_id)的唯一性。虽然我不控制这些,所以导入的数据中有重复。
所以问题是,使用 UNIQUE 索引而不是复合 PRIMARY KEY 会帮助我提高插入语句的速度吗?我知道很多其他因素会影响这一点,例如缓冲池等。
【问题讨论】:
-
“哪个更好:具有复合主键或单个主键和唯一索引的表?”“单个主键”是什么?
-
" 我需要 (backend_id, unique_id) 的唯一性。虽然我不控制这些,所以导入的数据中有重复。" 这是否意味着存在不良数据你需要修复还是忽略?
-
单个 PRIMARY KEY 将是 bucket_id。不,数据还不错,但是数据的唯一性依赖于我需要导入的更多列,所以如果两行发生冲突,那么 backend_id 和 weight 将是相同的,所以忽略第二行是安全的。
标签: sql performance insert indexing innodb