insert into multiple rows

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 에서도 똑같이 적용 가능.

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자
공대여자