CLI 스크립트를 사용하여 큰 MyISAM 테이블 (2,500 만 레코드)을 업데이트하려고합니다. 테이블이 다른 것으로 잠기거나 사용되지 않습니다.MySQL 업데이트 CASE WHEN/THEN/ELSE
각 레코드에 대해 단일 UPDATE 쿼리를 수행하는 대신 CASE 기능을 활용할 수도 있습니다.
id
필드는 PRIMARY입니다. 다음 쿼리에 밀리 초가 걸릴 것으로 판단됩니다.
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
END
Lo와 보라, 쿼리는 CPU를 소모하여 영원히 끝나지 않습니다.
놀랍게도, 내가 지정하지 않은 행에 NULL을 배치하여 쿼리가 2,500 만 개의 행을 모두 업데이트한다는 것을 알았습니다.
그 목적은 무엇입니까? 이 쿼리를 실행할 때마다 2 천 5 백만 행을 업데이트하지 않고 특정 행에 대해서만 대량 업데이트를 수행 할 수 있습니까? 아니면 개별 업데이트를 수행하고 커밋해야합니까?
'case' 문에'else'를 지정하십시오. 기본값은'null'입니다. –