테스트 사이트 - 개발 중인 베타 버전입니다

for 문을 사용한 mysql update 성능이슈 채택완료

김무식2 2년 전 조회 1,446

$_POST 변수에 배열을 받아서

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

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 6개

채택된 답변
+20 포인트
플래토
2년 전

어떤 프로그램이던지

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

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

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

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

2년 전

댓글의 절반이 아무말 대잔치네요. 이렇게들 포인트 벌어가나요~?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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

당연히 후자가 낫습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

엑스엠엘
2년 전
관리자 페이지에서
어쩌다 한번 하는 거라면
크게 신경 안 쓰셔도됩니다.

댓글을 작성하려면 로그인이 필요합니다.

2년 전

단순 동일한 양의 데이터 처리 대비

n 회로 나누어 처리되는것 보다는

한번에 처리되는게 더 낫습니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

그누위즈

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

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

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

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

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

</p>

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

<p>

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

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

F
2년 전

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

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

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

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

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인