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