오랜 시간 동안 데이터베이스에 대한 많은 업데이트를 플러시 해야하는 응용 프로그램을 작성 중이며 쿼리를 최적화하는 방법을 고수했습니다. 현재는 INSERT INTO ... VALUES (..), (..) ON DUPLICATE KEY UPDATE
모든 값을 하나의 쿼리로 일괄 처리하지만 큰 테이블에서 엄청나게 느리게 실행하는을 사용하고 있습니다. 실제로 행을 삽입 할 필요는 없습니다.
내가 본 다른 접근법은 업데이트를 사용 SET value = CASE WHEN...
하는 것입니다 (질의를 작성하는 방식으로 인해 생성하기가 어려울 수 있으며 CASE
수백 / 수천 키 의 성능에 대해 잘 모르겠습니다 ). 업데이트. 이 중 하나가 현재 방법보다 빠를까요?
내가 알 수있는 한, MySQL에서 이것을 수행하는 관용적이고 효율적인 방법은 없다는 사실에 당황합니다. 보다 빠른 방법이 실제로 없다면 ON DUPLICATE KEY
PostgreSQL로 전환하고 UPDATE FROM
구문을 사용하는 것이 가치가 있습니까?
다른 제안도 대단히 감사합니다!
편집 : 다음은 자주 업데이트되는 표 중 하나입니다. 관련이 없어서 열 이름을 제거했습니다.
CREATE TABLE IF NOT EXISTS `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` bigint(20) unsigned NOT NULL DEFAULT '0',
`b` bigint(20) unsigned NOT NULL DEFAULT '0',
`c` enum('0','1','2') NOT NULL DEFAULT '0',
`d` char(32) NOT NULL,
-- trimmed --
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`),
KEY `c` (`c`),
KEY `d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;