作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想更新mysql中的统计计数。
SQL如下:
REPLACE INTO `record_amount`(`source`,`owner`,`day_time`,`count`) VALUES (?,?,?,?)
CREATE TABLE `record_amount` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`owner` varchar(50) NOT NULL ,
`source` varchar(50) NOT NULL ,
`day_time` varchar(10) NOT NULL,
`count` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `src_time` (`owner`,`source`,`day_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
REPLACE INTO
与 SELECT id FOR UPDATE
进行交易和 UPDATE
REPLACE INTO
至 INSERT ... ON DUPLICATE KEY UPDATE
最佳答案
您是否正在构建一个汇总表,一次一个源行?并有效地做 UPDATE ... count = count+1
?扔掉代码,重新开始。 MAP-REDUCE 就像在图钉上使用大锤一样。
INSERT INTO summary (source, owner, day_time, count)
SELECT source, owner, day_time, COUNT(*)
FROM raw
GROUP BY source, owner, day_time
ON DUPLICATE KEY UPDATE count = count + VALUES(count);
SELECT ... FOR UPDATE
.没有死锁。没有多线程。等等。
AUTO_INCREMENT
;转UNIQUE
进入 PRIMARY KEY
. DATETIME
缩短到一个小时? (或类似的东西。)使用 DATETIME
,您将有更多的查询灵活性。 LOAD DATA
将其铲入临时表
raw
使上述
INSERT..SELECT
能行得通。如果大小可控,则制作
raw
Engine=MEMORY
以避免对其进行任何 I/O。
关于REPLACE INTO上的Mysql Innodb死锁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814982/
我是一名优秀的程序员,十分优秀!