使用pandas python

时间:2017-09-12 18:12:57

标签: python sql sqlite pandas where-in

我正在尝试加速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方法

2 个答案:

答案 0 :(得分:0)

实施@Aprillion's idea #1

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秒内运行。

问题解决了,不确定原因:/