【发布时间】:2015-11-28 12:31:44
【问题描述】:
全部: 我有一个表格,每十分钟记录一些维度上的一些请求数。这是我的桌子:
CREATE TABLE IF NOT EXISTS `mydb`.`realtime_bid_traffic` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '',
`owner_id` BIGINT(20) NOT NULL COMMENT '',
`log_time` DATETIME NOT NULL COMMENT '',
`bid_num` BIGINT(10) NOT NULL DEFAULT 0 COMMENT '',
`v_bid_num` BIGINT(10) NOT NULL DEFAULT 0 COMMENT '',
PRIMARY KEY (`id`) COMMENT '',
UNIQUE INDEX `dim_key` USING BTREE (`owner_id` ASC, `log_time` ASC) COMMENT '')
ENGINE = InnoDB;
如您所见,id 是一个自增的大整数,没有任何特殊含义。 owner_id 和 log_time 是维度键,而 bid_num 和 v_bid_num 是要更新的内容。受限于业务逻辑,我不可能在插入数据库之前收集所有数据,即我可能必须将owner_id=10 和log_time='2015-11-11 11:00:00' 插入数据库两次。由于表可能很大(数百万行)并且需要不断更新,我有两种选择:
- 插入或更新重复键。这样对每个维度 只有一行,但它涉及更新,为了 提高性能我为 owner_id 和 日志时间。
- 只需插入即可。在这种情况下,我将删除唯一键 owner_id 和 log_time 并插入数据库。由于 id 是 主键它永远不会重复,但它可能会增加表行 显着。
从性能的角度来看,我不知道哪个可能更好。
【问题讨论】:
标签: mysql sql database-performance