2012-10-31 4 views
1

10 만 개와 ​​같이 많은 수의 행을 업데이트해야합니다. 아마도 하나의 쿼리가 서버에 너무 무거울 것입니다.Sql은 많은 양의 행을 업데이트합니다.

업데이트를 분할하는 가장 좋은 방법은 무엇입니까? 갱신 200 행과 같은 뭔가, 다음 다른 200

편집, 잠깐 잠 : 나는 그것을 한 쿼리에서 그것을 할 괜찮을 것이라고 답변을 얻었다

좋아요. 하지만 여전히 어떻게하는지 알고 싶습니다. 행이 1,000,000 개 이상 있다고 가정합니다. 쿼리를 분할하는 가장 좋은 방법은 무엇입니까? last_updated_time ASC BY 제한 및 ORDER에서

+6

하나의 쿼리에서 100k 개의 행에 대한 업데이트를 실행할 수없는 경우 서버를 업그레이드합니다. 한 번에 몇 개의 필드를 업데이트 하시겠습니까? 엄청난 양이라면 스키마를 재고해야합니다. – Tony

+0

100K 행을 업데이트하는 것이 서버에 비해 너무 무거울 것이라고 생각하는 근거는 무엇입니까? – Xint0

+1

업데이트는 원자 적이어야합니다. 수면 중에 데이터가 변경되면 어떻게 될까요? –

답변

0

사용 조합 ... 같은

뭔가 ... 당신이 1000으로 설정하려면

UPDATE table SET ..... ORDER BY last_updated_time ASC LIMIT 5000 

5000 업데이트는 일반적으로 .. 너무 HAVY 수 없습니다.

2

제약 조건이 없다면 한 가지 쿼리를 모두 업데이트하는 것이 가장 좋습니다.

서버에 과부화로 인해 물건을 나누는 것에 대해 생각해 보면 실제로 사용하지 않는 것 같습니다. 자신의 솔루션과 숫자에 대해서 생각해보십시오. 백만 개의 데이터 세트가 있고 한 번에 200 개를 업데이트 한 다음 1 초 동안 잠자기하면 5000 개의 업데이트를 수행하고 83.3 분을 소비하여 서버가이 작업을 마칠 때까지 기다리고 소요 시간을 계산하지 않습니다 쿼리를 실행하면 정말 빨라질 수 있습니다.

기본적으로 데이터베이스의 모든 ID를 알고 있거나 선택하고 UPDATE와 함께 적절한 WHERE 절을 사용하여 각 ID 또는 그룹에 대한 쿼리를 보냅니다.

시나리오에 대해 더 잘 알지 못하는 한이 질문에 대답 할 수 없습니다. 매우 개별적인 사용 패턴을위한 최적의 작업을 처리하며 모든 솔루션을 어디에도 적용 할 수 없습니다.

관련 문제