for 문을 사용한 mysql update 성능이슈

for 문을 사용한 mysql update 성능이슈

QA

for 문을 사용한 mysql update 성능이슈

본문

$_POST 변수에 배열을 받아서

for문이나 foreach로  update 쿼리를 실행시키면 성능이슈가 있나요

 

UPDATE tablename SET 다음에 모든 칼럼과 값을 한번에 입력해서 쿼리를 실행시켜야 더 나은지요

이 질문에 댓글 쓰기 :

답변 6

어떤 프로그램이던지

DB와 connection의 I/O 빈도를 줄여주는게 성능/비용측면에서 상책입니다.

단, 단일쿼리가 너무 크면 서버의 설정값에 영향을 받을수있으니 참고하세요

중간에 적절한 분량에 따라 나눠서 업데이트/실행 하는 것도 고려해보세요

수백개의 쿼리내용이 될경우
수십개정도의 내용으로 끊어서 쿼리를 생성/실행하도록 카운트하는것도 방법이겠죠

for문으로 쿼리를 처리해야할게 몇백개가 아니라면 크게문제될건 없지만 

update로 컬럼을 다 넣을수 있는 문제라면 

for문을 돌려서 쿼리문을 만들고 update로 한번에 처리하는게 제일 좋겠지요. 

요샌 성능이 좋아서 거의 체감을 못하지만 당연히 for문으로 일일이 컬럼을 하나하나 업데이트 처리해 

주는것보단 쿼리문 수를 줄여주는게 속도가 더 빠릅니다. 

배열 크기와 업데이트해야 하는 행 수에 따라 다릅니다.

배열이 상대적으로 작고 업데이트할 행 수도 적은 경우 루프 또는 foreach 문을 사용하여 배열의 각 값에 대해 별도의 업데이트 쿼리를 실행하면 심각한 성능 문제가 발생하지 않습니다.

그러나 배열이 크거나 업데이트할 행 수가 많은 경우 배열의 각 값에 대해 별도의 업데이트 쿼리를 실행하면 많은 수의 데이터베이스 쿼리를 실행해야 하므로 성능 문제가 발생할 수 있습니다. .

이러한 경우 언급한 대로 모든 열과 값을 한 번에 설정하여 단일 쿼리에서 관련 행을 모두 업데이트하는 것이 보다 효율적인 접근 방식입니다. 이렇게 하면 데이터베이스 쿼리 수가 최소화되고 성능이 향상됩니다.

다음은 단일 쿼리에서 여러 행을 업데이트하는 방법의 예입니다.


UPDATE tablename SET column1 = 'value1', column2 = 'value2', column3 = 'value3' WHERE id IN (1, 2, 3);

서로 다른 변수를 기반으로 여러 행을 업데이트하는 데 유사한 접근 방식을 사용할 수 있습니다.

항상 쿼리 성능을 테스트하고 예상대로 작동하는지 확인하는 것이 좋습니다.

레코드 하나에 필요한( 업데이트할) 컬럼이 다 있다면

당연히 후자가 낫습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 59,282
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT