我正在尝试加速sqlite3查询,目前它很慢。
我有一个约2200万行的表,有两列(uid,info)
在python中,我找到了一个〜10,000个uid值的列表,这些值对应于上表中的uid。 (这篇文章随机生成的数字)
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方法
答案 0 :(得分:0)
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)
答案 1 :(得分:0)
不确定原因,但我删除了表并使用相同的代码/数据重建。现在它在0.1秒内运行。
问题解决了,不确定原因:/