2009-09-21 7 views
0

매주 자체를 업데이트하는 스크립트가 있습니다. 스크립트를 사용하여 서버에 과부하가 걸렸다는 경고를 호스팅에서 받았습니다. 문제는 내가 수집 한 쿼리 수가 너무 많아서 (내 8000 명 이상의 사용자 각각에 대해 하나씩) 업데이트 쿼리를 사용한다는 것입니다.업데이트 SQL 쿼리 추가

코딩이 잘못되었습니다. 이제는 모든 데이터를 하나의 SQL 쿼리로 정리하고 한꺼번에 업데이트해야합니다. 내 문제를 해결할 수 있기를 바랍니다.

빠른 질문입니다. 나는 순전히 UPDATE 쿼리는이 같은 세미콜론으로 구분 추가하는 경우 :

UPDATE table SET something=3 WHERE id=8; UPDATE table SET something=6 WHERE id=9; 

그리고 각 업데이트에 대한 데이터베이스를 쿼리 반대로 다음 하나 개의 큰 SQL 코드와 데이터베이스를 업데이트, 더 빨리 잘 될 것인가?

UPDATE 문을 "묶는"가장 좋은 방법입니까? 이것은 서버로드를 상당히 줄입니까?

+0

사용 가능한 저장 프로 시저가 있습니까? –

+1

왜 그런 일을해야합니까? 시나리오를 설명 할 수 있다면 더 나은 해결책이 나올 수 있습니다. – shahkalpesh

+0

나는 http://www.tweekly.fm를 운영한다. last.fm에서 매주 트윗을 보내는 매시업입니다. 매주마다 데이터를 업데이트하고 트윗을 보냅니다. 나는 사용자 페이지에 대한 밴드 이름을 저장한다. 그래서 매주 사용자 데이터를 업데이트해야합니다. –

답변

0

왕복 횟수가 1 회이기 때문에 IO가 향상되지만 데이터베이스 "노력"은 동일합니다.

1

가장 좋은 방법은 "뭔가"필드에 의해 이러한 진술 배치하는 것입니다 ... 물론

UPDATE table SET something=3 WHERE id IN (2,4,6,8) 
UPDATE table SET something=4 WHERE id IN (1,3,5,7) 

, 귀하의 요구 사항에 대해 아무것도 모르면서는, 거기 가능성이 더 나은 솔루션이

+0

죄송합니다. 그것은 작동하지 않습니다. 각 사용자는 고유 한 데이터를 가지고 있습니다 ... –

+0

그런 다음 고유 한 작업을 수행해야하며, 고유 한 쿼리가 필요합니다. 신용 카드를 발급 받고 호스팅 제공 업체에 전화 할 때! –

2

값으로 구분 된 파일을 만들고 MySQL의 LOAD DATA INFILE을 사용하십시오. 이것은 UPDATE보다 훨씬 빠릅니다. = 1의 경우 B == 0 달리 -

LOAD DATA INFILE '/path/to/myfile' 
REPLACE INTO TABLE thetable(field1,field2, field3) 
//optional field and line delimiters 
; 
0

SQL의 호기심이 그 정수 표현 (B) 1) -abs (부호 (A) 다음이다. 편의상이 표현식 _eq (A, B)를 호출 할 수 있습니다. 그래서

업데이트 테이블 설정 뭔가 = 3 * _eq (id, 8) + 6 * _eq (id, 9) 여기서 id는 (8,9);

은 단일 업데이트 문으로 원하는 것을 수행합니다.