какой из них эффективен, объединять запросы с помощью sql или объединять запросы с помощью панд? - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу использовать данные из нескольких таблиц в pandas dataframe.У меня есть 2 идеи для загрузки данных с сервера, один из способов - использовать SQL объединение и извлечение данных, а один способ - загружать кадры отдельно и объединять их, используя pandas.merge.

SQL Join

когда я хочу загрузить данные в pandas.

query='''SELECT table1.c1, table2.c2
    FROM table1
    INNER JOIN table2 ON table1.ID=table2.ID where condidtion;'''
df = pd.read_sql(query,engine)

Pandas Merge

df1 = pd.read_sql('select c1 from table1 where condition;',engine)
df2 = pd.read_sql('select c2 from table2 where condition;',engine)
df = pd.merge(df1,df2,on='ID', how='inner')

какая из них быстрее?Предположим, что я хочу сделать это для более чем 2 таблиц и 2 столбцов.Есть ли идея получше?Если это необходимо знать, я использую PostgreSQL.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Первый быстрее второго.Первые просто делают один вызов в базу данных и возвращают результат, уже присоединенный и отфильтрованный.Однако последний делает два вызова базы данных, а затем объединяет результирующие наборы в приложении / программе.

0 голосов
/ 25 апреля 2018

Чтобы действительно знать, что быстрее, вам нужно попробовать два запроса, используя ваши данные в ваших базах данных.

Основное правило - выполнять логику в одном запросе. Базы данных предназначены для запросов. У них есть сложные алгоритмы, несколько процессоров и много памяти для их обработки. Так что полагаться на базу данных вполне разумно. Кроме того, каждый запрос имеет некоторые издержки, поэтому два запроса имеют вдвое больше, чем один.

Тем не менее, есть определенно обстоятельства, когда выполнение работы в пандах будет быстрее. Панды собираются делать работу в локальной памяти. Это ограничено, но гораздо меньше, чем в «старые добрые времена». Вероятно, он не будет многопоточным.

Например, набор результатов может быть намного больше, чем две таблицы. В этом случае перемещение данных из базы данных в приложение может быть (относительно) дорогим. Выполнение работы в пандах может быть быстрее, чем в базе данных.

С другой стороны, никакие записи не могут соответствовать условиям JOIN. Это определенно тот случай, когда один запрос будет быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...