pandas read_sql необычно медленный

Я пытаюсь прочитать несколько столбцов из трех разных таблиц MySQL на три разных фрейма.

Это не займет много времени, чтобы читать из базы данных, но фактически помещать их в dataframe довольно медленно.

start_time = time.time()
print('Reading data from database...')

from sqlalchemy import create_engine
q_crash = 'SELECT <query string> FROM table1'
q_vehicle = 'SELECT <query string> table2'
q_person = 'SELECT <query string> FROM table3'
engine = create_engine('mysql+pymysql://user:password@host:port/dbasename')

print('Database time: {:.1f}'.format(time.time() - start_time))

crash = pd.read_sql_query(q_crash, engine)
print('Read_sql time for table 1: {:.1f}'.format(time.time() - start_time))
vehicle = pd.read_sql_query(q_vehicle, engine)
print('Read_sql time for table 2: {:.1f}'.format(time.time() - start_time))
person = pd.read_sql_query(q_person, engine)
print('Read_sql time for table 3: {:.1f}'.format(time.time() - start_time))

Вывод:

Reading data from database...
Database time: 0.0
Read_sql time for table 1: 13.4
Read_sql time for table 2: 30.9
Read_sql time for table 3: 49.4

Это нормально? Таблицы довольно большие - таблица 3 составляет более 601 000 строк. Но pandas обрабатывал большие наборы данных без сучка и задоринки всякий раз, когда я использую read_csv.

python,mysql,pandas,

0

Ответов: 1


2

ИМО не имеет смысла читать полные таблицы в Pandas DFs, если вы их используете в MySQL DB - почему бы вам не использовать SQL для фильтрации и объединения ваших данных? Вам действительно нужны все строки из этих трех таблиц как Pandas DF?

Если вы хотите присоединиться к ним, вы можете сделать это сначала на стороне MySQL и загрузить результирующий набор в один DF ...

что-то подобное:

qry = 'select p.*, v.*, c.* from vehicle v join person p on v.id = p.vehicle_id join crash c on c.id = p.crash_id where <additional where clause>'
df = pd.read_sql(qry, engine)
питон, MySQL, панды,
Похожие вопросы