less than 1 minute read

insert into multiple rows

insert into TABLE_NAME (field1,field2,field3) values(value1-1,value2-1,value3-1) ,(value1-2,value2-2,value3-2) ,(value1-3,value2-3,value3-3)

이런 형식으로 사용함.

  • 이렇게 할 경우 좋은점은?
  • DB서버와의 네트워크 통신이 줄어듬
  • 3개의  insert를 1번만 통신하게 됨.
  • DB가 멀리 있을 경우 성능 증가.

  • 3개를 한번에 처리하므로 한번씩 3번 하는 것 보다 빠름
  • 접속-table lock(전 처리)-처리-table unlock(후 처리)-끊기
    접속-table lock(전 처리)-처리-table unlock(후 처리)-끊기
    접속-table lock(전 처리)-처리-table unlock(후 처리)-끊기
  • 접속-table lock(전 처리)- 처리x3 -table unlock(후 처리)-끊기

  • 이렇게 할 경우 단점은?
  • Slow Query 발생.
  • 각각으로 할 경우 0.5초 걸리는 경우 , 10개를 묶어서 할 경우 40초 정도 되는 경우가 생기면, slow query 로 체크된다.

  • DB Table lock 시간이 길어짐.
  • insert 한번 동작 시간이 길어지므로.

  • 언제 쓸까?
  • 배치 작업으로 다수를 넣을 경우.

  • 이때는 쓰지 말자
  • 실시간 insert 가 중요한 경우.

  • 주의할 점
  • DB설정에 쿼리의 길이, 전송 패킷 제한 등이 있을 것이다. 이 제한이 넘어가게 쿼리를 만들면 문제가 될 수 있다.
  • 개인적으로 100KB 정도로 해봤는데 문제 없더라. 상세는 해당 DBMS의 설정을 뒤져보도록.

  • 참고
  • MySQL의 경우
    replace into 에서도 똑같이 적용 가능.

🔗original-link

Updated: