Pandas 및 Python을 사용하여 SQL db에 대한 대량 삽입 속도 향상

이 도움말은 다음에 대해 자세히 설명합니다.

방법 1 :

여기서 접근 방식 :

이 방법을 사용하여 데이터 프레임의 각 행 수와 데이터베이스에 쓰는 데 걸린 시간을 찾으십시오.
rows_count = [ ’50’, ‘1000 & # x27;,’5000 & # x27 ;, ‘0.01 M ‘,’0.05M ‘,’0.1M ‘,’0.2M ‘,’0.3M ‘]
시간 (초) = [0.005, 0.098, 0.440, 0.903, 4.290, 8.802, 17.776, 26.982]

방법 2

이제 method1에서 이미 사용 된 함수에 cursor.fast_executemany = True를 추가 할 수 있습니다. method1과 method2의 차이점이 강조 표시됩니다.

데이터 프레임의 행 수와이 방법을 사용하여 데이터베이스에 쓰는 데 걸린 각 시간을 찾으십시오.
rows_count = [ ’50’, ‘1000 & # x27;,’5000 & # x27 ;, ‘0.01M’, ‘0.05M’, ‘0.1M’, ‘0.2M’, ‘0.3M’]
시간 (초) = [0.009, 0.179, 0.574, 1.35, 6.718, 14.949, 28.422, 42.230]

방법 3 :

Pandas‘to_sql’함수, sql alchemy 및 python을 사용하여 데이터 프레임 df를 sql에 씁니다.

데이터 프레임의 행 수와이 방법을 사용하여 데이터베이스에 쓰는 데 걸리는 각 시간을 찾으십시오.
rows_count = [ ’50’, ‘1000 & # x27;,’5000 & # x27 ;, ‘0.01M’, ‘0.05M’, ‘0.1M’, ‘0.2M’, ‘0.3M’]
시간 (초) = [0.0230, 0.081, 0.289, 0.589, 3.105, 5.74, 11.769, 20.759]

방법 4 :

이제 이벤트를 사용하여 cursor.fast_executemany = True 를 설정하고 to_sql 함수를 사용하여 데이터베이스에 쓸 수 있습니다 (method3와 method4의 차이점이 강조 표시됨)

데이터 프레임의 행 수와이 방법을 사용하여 데이터베이스에 쓰는 데 걸리는 각 시간을 찾으십시오.
rows_count = [ ’50’, ‘1000 & # x27;,’5000 & # x27 ;, ‘0.01M’, ‘0.05M’, ‘0.1M’, ‘0.2M’, ‘0.3M’]
시간 (초) = [0.017, 0.015, 0.031, 0.063, 0.146, 0.344, 0.611, 0.833]

이제 서로 다른 크기 (50 ~ 30 만 레코드 범위)의 데이터 프레임을 삽입하기 위해 서로 다른 방법으로 데이터베이스에 쓰는 데 걸리는 시간을 비교해 보겠습니다. ‘rows count’는 데이터 프레임에 기록 된 행 수를 나타내고, ‘time’은 각 행 수를 데이터베이스에 삽입하는 데 다른 방법으로 걸린 시간을 나타냅니다.

보시다시피 method4는 다른 방법에 비해 시간이 매우 짧습니다 . method4를 사용하면 삽입 속도가 항상 15 배 이상 빨라집니다.

참조

https://github.com/mkleehammer/pyodbc/issues/547