有人可以帮助我了解哪种方法最有效。
第一个表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
答案 0 :(得分:0)
社区建议使用Join子句,但是在我做过的一些测试中,In子句效率更高
您必须自己进行测试,为此使用SQL Server配置文件工具