Where子句(HIVE)中Join vs子查询的性能

时间:2018-10-14 19:31:43

标签: hive inner-join where

有人可以帮助我了解哪种方法最有效。

第一个表df = pd.concat([df]*10000).reset_index() In [228]: %timeit df[df.set_index(['Firstnames', 'Lastnames']).index.isin(lst)] 15.5 ms ± 270 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [236]: %%timeit ...: mask = df[['Firstnames', 'Lastnames']].agg(tuple, 1).isin(lst) ...: df[mask] ...: 853 ms ± 22.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) In [231]: %%timeit ...: idx = (df.values[:, :2] == lst[:, None]).any(axis=(0, -1)) ...: df[idx] ...: 11.6 ms ± 264 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) 的一列users_of_interest_table具有约1,000个唯一的用户ID。

第二个表users具有一个app_logs_table列和一个users列。该表具有超过10亿行和超过1000万唯一用户。

app_log中的用户获取所有应用日志数据的最有效方法是什么。到目前为止,这是我想出的。

选项1:使用内部联接

users_of_interest

选项2:Where子句中的子查询

SELECT 
  u.users, a.app_logs
FROM 
  users_of_interest_table u
INNER JOIN 
  app_logs_table a
ON 
  u.users = a.users

1 个答案:

答案 0 :(得分:0)

社区建议使用Join子句,但是在我做过的一些测试中,In子句效率更高

您必须自己进行测试,为此使用SQL Server配置文件工具