programing

한 MySQL 테이블을 다른 MySQL의 값으로 업데이트합니다.

projobs 2022. 10. 31. 23:22
반응형

한 MySQL 테이블을 다른 MySQL의 값으로 업데이트합니다.

다른 MySQL 테이블 정보를 기반으로 업데이트하려고 합니다.

나의original테이블은 다음과 같습니다.

id | value
------------
1  | hello
2  | fortune
3  | my
4  | old
5  | friend

그리고 그tobeupdated테이블은 다음과 같습니다.

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        |    | old
4        |    | friend
5        |    | fortune

갱신하고 싶다idtobeupdated와 함께id부터original에 기반을 둔value(저장된 파일)VARCHAR(32)필드)를 참조해 주세요.

갱신된 테이블은 다음과 같습니다.

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        | 4  | old
4        | 5  | friend
5        | 2  | fortune

도움이 되는 질문이 있습니다만, 매우 느립니다.

UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value

이로 인해 CPU가 최대치를 초과하여 결과적으로 일부 업데이트만 수행된 타임아웃이 발생합니다(일치하는 값은 수천 개).매칭은 알고 있습니다.value속도가 느리겠지만 이 데이터만 일치시킬 수 있어요

이와 같이 값을 갱신할 수 있는 더 좋은 방법이 있을까요?병합된 결과에 대한 세 번째 테이블을 생성할 수 있습니다. 더 빠를 수 있다면?

MySQL - 다른 테이블의 값으로 테이블을 업데이트하려면 어떻게 해야 합니까?시도해 봤지만 별로 도움이 되지 않았습니다.좋은 생각 있어요?

MySQL 초보자를 도와줘서 고마워요!

UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id

그걸로 충분할 거야, 그리고 실제로 네 것과 똑같은 일을 하는 거야.다만, 복수의 「WHERE」조건보다 「JOIN」구문을 사용하는 것이 좋기 때문에, 읽기 쉽다고 생각합니다.

천천히 달리는 것은 테이블이 얼마나 큰가요?인덱스가 있어야 합니다.tobeupdated.value그리고.original.value

편집: 쿼리를 단순화할 수도 있습니다.

UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id

USING조인의 두 테이블이 동일한 이름을 가진 경우 단축형입니다.key예를 들어id. equi-http://http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join 를 참조해 주세요.

이러한 테이블의 용도에 따라 다르지만 삽입 및 업데이트 시 원래 테이블에 트리거를 설정하는 것을 고려할 수 있습니다.삽입 또는 업데이트가 완료되면 원래 테이블의 한 항목만 기준으로 두 번째 테이블을 업데이트합니다.그게 더 빠를 거예요.

언급URL : https://stackoverflow.com/questions/5727827/update-one-mysql-table-with-values-from-another

반응형