INSERT INTO … ON DUPLICATE KEY UPDATE … 가 빠르다

제목을 짧게 써서 뭔소린가 하겠네요. 개발하다보면 흔히 접하는 문제! 바로 비슷한 쿼리를 어떨때는 INSERT 하고 어떨때는 UPDATE 해야 한다는 것입니다. 그런데 어떤경우에는 동일한 키로 데이터가 이미 들어가 있는지 알수 없는 경우가 있다는 점이지요.

이럴때 개발자는 몇가지 방법을 사용하는데요 첫번째가  해당 정보가 이미 있는지 SELECT 한 후 SELECT 결과가 없으면 INSERT 하고 있으면 UPDATE를 합니다. 두번째는 일단 INSERT 하는데 이미 있어서 실패하면 UPDATE를 하는 방법을 사용합니다. 때로는 반대의 경우도 사용합니다. 그리고 세번째로 INSERT INTO … ON DUPLICATE KEY UPDATE … 쿼리를 사용하는 것입니다. 이 쿼리는 MySQL 용입니다. MySQL을 사용하고 변경할 일이 없다면 거의 세번째 방법을 사용하는데요. 이유는 PHP 코드가 상당히 간결해 지기 때문입니다.

“UPDATE VS INSERT ON DUPLICATE KEY UPDATE”라는 글을 보면 INSERT INTO … ON DUPLICATE KEY UPDATE …를 사용한 세번째 방법이 두번째 방법보다 빠르다고 하네요. 원인에 대해서 코멘트를 보면 INSERT 쿼리가 SELECT, UPDATE 보다 빠르고 쿼리 요청 수도 적어서라는 글이 있네요. 개인적으로는 쿼리 질의 회수가 적은 것이 보다 빠른 성능을 낸다고 믿고 있습니다. 그래서 FUNCTION이나 PROCEDURE를 사용하는 이유이기도 합니다. PHP가 다수의 쿼리를 MySQL에 요청해서 로직을 진행하는 것보다 MySQL에 PROCEDURE로 로직을 만들어 PHP가 한번 호출하는 것이 빠르기 때문입니다. MySQL 로 개발할때도 Oracle이나 MSSQL 로 개발할때처럼 비즈니스 로직을 DB로 이전한다면 더 좋은 성능을 낼 수 있지 않을까 생각해 봅니다.

Advertisements

Published by: benant

WEB PROGRAMMER. PHP, ASP, XML, Javascript, VBScript, PL/SQL, MySQL, Oracle. scrollads.co.kr 새로운 모바일 광고 서비스. trenue.com 시스탬 트래이딩 서비스. blogman.co.kr 블로그 운영 관리 서비스. creget.co.kr 해외 상품 구매대행. 핫딜 정보 제공 서비스. fgshop.co.kr - 독립형 쇼핑몰 솔루션.

카테고리 Web태그댓글 2개

2 thoughts on “INSERT INTO … ON DUPLICATE KEY UPDATE … 가 빠르다”

  1. 좋은 글 잘 봤습니다.
    궁금한 점은 Insert 할 항목은 10개이고, 업데이트로 할 항목은 3개 정도만 업데이트해야 할 경우에도 이걸 사용할 수 있나요?

    1. 인서트 할지 업데이트 할지 판단하는 것까지 포함 해서 전체 실행 시간을 판단한다면 사용할이유는 충분하고요. 인서트와 업데이트 구분을 프로그램 로직이 관여 하지 않는 상황이 되기 때문에 프로그램 소스도 간결해 집니다.

      꼭 10개는 인서트 3개는 업데이트로 정해진거 아니면 쓰셔도 됩니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중