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}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
3.31
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.18
4.19
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30
5.1
5.2
5.3
5.4