使用 pandas python 的 WHERE IN SQL 查询速度慢

Slow WHERE IN SQL query using pandas python

我正在尝试加速 sqlite3 查询,目前它很慢。

我有一个 table 约 2200 万行,两列(uid,信息)

在 python 中,然后我找到了与上面 table 中的 uid 相对应的 ~10,000 个 uid 值的列表。 (为此 post 随机生成的数字)

import numpy as np
import pandas as pd
import sqlite3

conn = sqlite3.connect('mydb.db')

uids = np.random.random(10000)
uids = list(map(int,list(map(round,uids*2000000))))

sql_query = 'SELECT * FROM mytable WHERE uid IN (' + ','.join(map(str, uids)) + ')'
sqlpd = pd.read_sql_query(sql_query,conn)

查询有效,但速度很慢(约 15 秒)。想知道如何加快速度,我猜这是导致问题的 WHERE ... IN 方法

实施

pd.DataFrame({'uid':uids}).to_sql('tmp', conn, index=False, if_exists='replace')

现在我们可以这样做了:

sql_query = 'SELECT a.* FROM mytable a JOIN tmp b ON a.uid = b.uid'
sqlpd = pd.read_sql_query(sql_query,conn)

不知道为什么,但我删除了 table 并用相同的 code/data 重建了。现在 0.1 秒后 运行。

问题已解决,不知道为什么:/