Подход 1: курсор + fetchmany
В среднем чтение 10 миллионов строк занимает около 1,2 минуты.
Код: Выделить всё
sql = f"SELECT {col_id} FROM {table_id}"
raw_conn = engine.raw_connection()
try:
cursor = raw_conn.cursor()
cursor.execute(sql)
total_rows = 0
while True:
rows = cursor.fetchmany(chunk_size)
if not rows:
break
# Direct string conversion - fastest approach
values.extend(str(row[0]) for row in rows)
В среднем чтение 10 миллионов строк занимает около 2 минут.
Код: Выделить всё
sql = f"SELECT {col_id} FROM {table_id} WHERE {col_id} IS NOT NULL"
values: List[str] = []
for chunk in pd.read_sql(sql, engine, chunksize=CHUNK_SIZE):
# .astype(str) keeps nulls out (already filtered in SQL)
values.extend(chunk.iloc[:, 0].astype(str).tolist())
Является ли такое время (~1,2–2 минуты для 10 миллионов строк) разумным или его можно значительно улучшить с помощью другого шаблона (например, настроек драйвера, стратегии пакетной обработки, многопроцессорной обработки или другой библиотеки)?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-python
Мобильная версия