使用 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 秒后 运行。
问题已解决,不知道为什么:/
我正在尝试加速 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 秒后 运行。
问题已解决,不知道为什么:/