【发布时间】:2018-02-21 07:21:48
【问题描述】:
我正在尝试加快 sqlite3 查询,目前速度很慢。
我有一个约 2200 万行的表,其中包含两列(uid、info)
然后,我在 python 中找到与上表中的 uid 相对应的约 10,000 个 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 方法
【问题讨论】:
-
随机想法:尝试使用您需要的 uid 创建一个临时表并使用
mytable加入 - 如果IN使用具有 n 行和 m 的O(n*m)算法实现,这将有所帮助uids,但连接已经被优化了 -
想法 #2:运行 10000 次选择
WHERE uid = {}- 这两个想法都可以在O(m*log(n))中实现,不知道哪个更快 -
uid 列是否被索引?
-
我还会在 SQLite 中创建一个临时表并进行连接。 IMO
idea #2将会非常缓慢... -
uid列为主索引
标签: python sql sqlite pandas where-in