반응형
최근 MSSQL에 python을 통해 전처리 한 대용량 데이터를 insert할 일이 생겨, 관련된 내용을 정리하려고 합니다.
테스트에 사용하는 데이터의 row는 10만건이며 행은 15행이 존재합니다.
TEST1 : 6분26초 (하나씩 insert - 최종 commit)
첫 번째 테스트는 데이터를 하나씩 삽입 후에 commit을 진행하였습니다.
10만건의 데이터를 삽입하는데 10분이 걸렸으며, 모든데이터 삽입 후 commit을 하기 때문에 중간에 에러 발생시 롤백이 진행됩니다.
TEST2 : 18분41초 (하나씩 insert - 삽입 마다 commit)
두 번째 테스트는 TEST1과 같은 방식이지만 하나씩 삽입할 때마다 커밋을 해주었습니다. 이런경우 중간에 에러가 날 경우라도 기존에 삽입된 데이터는 유지된다는 장점이 있지만 TEST1에 비해 약 3배 정도 느려진 것을 확인할 수 있습니다.
TEST3 : 23초 (bulk insert)
세 번째 테스트는 한번 삽이할 때 30개의 데이터를 삽입하는 방법입니다. 벌크 인서트라고 하며, 기존 TEST 대비 엄청 빠른 속도를 보입니다.
저는 아래 답변을 참고하였습니다.
TEST4 : 7분 38초 (executemany)
executemany 말 그대로 많은 데이터를 인서트하는 방법입니다. 하지만 제가 잘 이해를 못해서 그런지 성능이 크게 좋지 못했습니다.
결론
앞선 테스트에서 봤듯이 저는 TEST3번을 통해 데이터를 INSERT했습니다.
TEST3 방법을통해 약 190만건의 데이터를 INSERT하는데 7분41초가 걸렸으며, 혹시 이보다 빠른 속도를 원하시는 분들은 sqlalchemy(create_engine), to_sql등 찾아보면 좋을 것 같습니다.
반응형
'언어 > Python' 카테고리의 다른 글
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() (0) | 2023.01.25 |
---|---|
[python] 특정 문자열 이후 제거하기(정규표현식 X) (0) | 2022.12.13 |
[Python] 리눅스 서버에 anaconda 설치 (0) | 2022.10.27 |
[Python] TypeError: a bytes-like object is required, not 'str' (0) | 2022.09.21 |
[Python] SMTPAuthenticationError (0) | 2022.07.05 |