반응형
큰 테이블의 행을 업데이트하는 가장 뛰어난 방법
테이블이 2개 있습니다.
요청:
idㅤㅤ|ㅤㅤaccountㅤㅤㅤㅤ|ㅤsubaccountㅤ|ㅤamountㅤ|ㅤㅤupdatedAmount
1ㅤㅤ|ㅤㅤACCOUNT_1ㅤㅤ|ㅤㅤㅤ12ㅤㅤㅤ|ㅤㅤ10.2ㅤㅤ|ㅤㅤnull
2ㅤㅤ|ㅤㅤACCOUNT_2ㅤㅤ|ㅤㅤㅤ45ㅤㅤㅤ|ㅤㅤ0ㅤㅤㅤ|ㅤㅤnull
3ㅤㅤ|ㅤㅤACCOUNT_3ㅤㅤ|ㅤㅤㅤ11ㅤㅤㅤ|ㅤㅤ50.6ㅤㅤ|ㅤㅤnull
일별 데이터:
idㅤㅤ|ㅤㅤaccountㅤㅤㅤㅤ|ㅤsubaccountㅤ|ㅤamountㅤ
1ㅤㅤ|ㅤㅤACCOUNT_1ㅤㅤ|ㅤㅤㅤ45ㅤㅤㅤ|ㅤㅤ3.12
2ㅤㅤ|ㅤㅤACCOUNT_1ㅤㅤ|ㅤㅤㅤ12ㅤㅤㅤ|ㅤㅤ15
3ㅤㅤ|ㅤㅤACCOUNT_2ㅤㅤ|ㅤㅤㅤ11ㅤㅤㅤ|ㅤㅤ1.09
4ㅤㅤ|ㅤㅤACCOUNT_2ㅤㅤ|ㅤㅤㅤ70ㅤㅤㅤ|ㅤㅤ30.6
5ㅤㅤ|ㅤㅤACCOUNT_3ㅤㅤ|ㅤㅤㅤ11ㅤㅤㅤ|ㅤㅤ50.6
요청 테이블의 updatedAmount 열을 다음 기준에 맞게 업데이트해야 합니다.
- DailyData 테이블에서 동일한 AND 하위 계정을 가진 행을 발견한 경우에만 행을 업데이트합니다.
·테이블마다 컬럼 양 값이 다른 경우에만 갱신됩니다.
이 조건이 충족되는 행의 경우 (DailyData 테이블에서) updatedAmount(Request 테이블) 열에 양이 저장됩니다.
따라서 이 예에서는 ID 1만 갱신되는 출력을 얻을 수 있습니다.
idㅤㅤ|ㅤㅤaccountㅤㅤㅤㅤ|ㅤsubaccountㅤ|ㅤamountㅤ|ㅤㅤupdatedAmount
1ㅤㅤ|ㅤㅤACCOUNT_1ㅤㅤ|ㅤㅤㅤ12ㅤㅤㅤ|ㅤㅤ10.2ㅤㅤ|ㅤㅤ15
2ㅤㅤ|ㅤㅤACCOUNT_2ㅤㅤ|ㅤㅤㅤ45ㅤㅤㅤ|ㅤㅤ0ㅤㅤㅤ|ㅤㅤnull
3ㅤㅤ|ㅤㅤACCOUNT_3ㅤㅤ|ㅤㅤㅤ11ㅤㅤㅤ|ㅤㅤ50.6ㅤㅤ|ㅤㅤnull
저의 큰 문제는 퍼포먼스입니다.이것은 일일 프로세스이며 요청 테이블에는 + 100만 행이 있는 반면 DailyProcess 테이블에는 매일 변경되는 약 30만 행이 있습니다.지금까지 두 가지 방법을 만들었지만 둘 다 시간이 많이 걸립니다.
1:
UPDATE Request r
LEFT OUTER JOIN DailyData d
ON r.account = d.account AND r.subaccount = d.subaccount
SET r.updatedAmount = d.amount
2:
UPDATE Request r, DailyData d
SET r.updatedAmount = d.amount
WHERE r.account = d.account AND r.subaccount = d.subaccount AND r.amount <> d.amount
누가 더 빠른 방법을 제안할 수 있나요?어떤 도움이라도 감사할 것이다.
내 말은, 너는 사용할 수 있다.INNER JOIN
UPDATE Request r
INNER JOIN DailyData d
ON r.account = d.account AND r.subaccount = d.subaccount
SET r.updatedAmount = d.amount
WHERE r.amount <> d.amount;
두 테이블의 인덱스(계정, 서브계정)를 생성하여 업데이트 성능을 향상시킬 수 있습니다.
언급URL : https://stackoverflow.com/questions/70238977/most-performant-way-to-update-rows-on-large-tables
반응형
'programing' 카테고리의 다른 글
열 값이 동일할 때의 합계 값 (0) | 2022.09.25 |
---|---|
GROUP BY를 사용하여 MySQL에서 문자열을 연결하는 방법은 무엇입니까? (0) | 2022.09.25 |
Python dict를 데이터 프레임으로 변환 (0) | 2022.09.25 |
PHP를 사용하여 파일을 가장 빠르게 처리하는 방법 (0) | 2022.09.25 |
Perl, Python, AWK 및 sed의 차이점은 무엇입니까? (0) | 2022.09.25 |