哪一个是有效的,使用sql连接查询,或使用pandas合并查询?

时间:2018-04-25 11:05:27

标签: python sql postgresql pandas

我想使用<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <tbody> <tr class="parent"> <td><input type="button" name="ownorwant" value="own"></td> <td><input type="button" name="ownorwant" value="want"></td> </tr> <tr style="display: none;" class="child1"> <td><input type="button" name="size" value="big" /></td> <td><input type="button" name="size" value="small" /></td> </tr> <tr style="display: none;" class="child3"> <td><input type="submit" name="save" value="save" /></td> </tr> </tbody> <tbody> <tr class="parent"> <td><input type="button" name="ownorwant" value="own"></td> <td><input type="button" name="ownorwant" value="want"></td> </tr> <tr style="display: none;" class="child1"> <td><input type="button" name="size" value="big" /></td> <td><input type="button" name="size" value="small" /></td> </tr> <tr style="display: none;" class="child3"> <td><input type="submit" name="save" value="save" /></td> </tr> </tbody> </table>中多个表的数据。我有2个从服务器下载数据的想法,一种方法是使用pandas dataframe连接和检索数据,一种方法是单独下载数据帧并使用pandas.merge合并它们。

SQL Join

当我想将数据下载到SQL

pandas

Pandas Merge

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

哪一个更快?假设我想要超过2个表和2列。 有什么好主意吗? 如果有必要知道我使用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 个答案:

答案 0 :(得分:3)

前者比后者快。前者只需对数据库进行一次调用,并返回已加入和过滤的结果。但是,后者对数据库进行两次调用,然后将应用程序/程序中的结果集合并。

答案 1 :(得分:1)

要真正了解哪个更快,您需要使用数据库中的数据尝试这两个查询。

经验法则是在单个查询中执行逻辑。数据库专为查询而设计。它们具有复杂的算法,多个处理器和大量内存来处理它们。所以,依靠数据库是非常合理的。此外,每个查询都有一些开销,因此两个查询的开销是一个查询的两倍。

也就是说,绝对有可能在大熊猫中开展工作的速度会更快。熊猫将在本地记忆中完成工作。这是有限的 - 但比“过去的好时光”要少得多。它可能不会是多线程的。

例如,结果集可能比两个表大得多。在这种情况下,将数据从数据库移动到应用程序可能(相对)昂贵。在pandas中完成工作可能比在数据库中更快。

在另一个极端,没有记录可能符合JOIN条件。这绝对是单个查询更快的情况。