【问题标题】:which one is effecient, join queries using sql, or merge queries using pandas?哪一个是高效的,使用 sql 连接查询,或使用 pandas 合并查询?
【发布时间】:2018-10-05 20:04:51
【问题描述】:

我想在pandas dataframe 中使用来自多个表的数据。我有 2 个从服务器下载数据的想法,一种方法是使用 SQL 加入和检索数据,另一种方法是单独下载数据帧并使用 pandas.merge 合并它们。

SQL 连接

当我想将数据下载到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)

熊猫合并

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

【问题讨论】:

  • 这取决于你的情况。如果为连接设置的条件减少了数据集的大小。我会选择 SQL 连接。因为它会减少您需要传输的数据。否则我会用一个大的数据集和监视器来测试它
  • 想象一下没有行满足连接条件table1.ID=table2.ID的情况。

标签: python sql postgresql pandas


【解决方案1】:

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

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

也就是说,在某些情况下,使用 pandas 进行工作肯定会更快。 Pandas 将在本地内存中完成这项工作。这是有限的——但比“过去的美好时光”要少得多。它可能不会是多线程的。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2023-03-13
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多