我在
Python中使用sqlite3模块,但是相对于在命令shell中运行sqlite3中的查询,我发现某个SELECT查询的速度非常慢.我将首先说两个版本都是相同的3.7.17.
我的疑问是
SELECT r.ID, r.Date FROM my_table r
WHERE
r.Date IN (SELECT Date FROM my_table WHERE ID = r.ID GROUP BY Date LIMIT 2);
Python代码是
con = lite.connect(path_to_database)
cur = con.cursor()
with con:
cur.execute(sql_query)
其中sql_query是包含初始查询的字符串变量.
我假设问题在于优化IN子查询.
性能详细信息:my_table包含167000条记录,shell中的查询需要~10秒,Python中的查询需要> 5分钟(当它走到这一步时我停了它).
目前,因为它是表创建我只是将代码复制并粘贴到shell中作为一种解决方法,我该如何解决这个问题,以便我可以从Python运行查询?
加成
当我运行EXPLAIN QUERY PLAN时,我得到以下内容
贝壳:
0 0 0 SCAN TABLE PIT_10_Days AS r (~500000 rows)
0 0 0 EXECUTE CORRELATED LIST SUBQUERY 1
1 0 0 SEARCH TABLE PIT_10_Days USING AUTOMATIC C
1 0 0 USE TEMP B-TREE FOR GROUP BY
Python:
0 0 TABLE PIT_10_Days AS r
0 0 TABLE PIT_10_Days
我不确定在Python中获取EXPLAIN QUERY PLAN是否存在差异,或者它实际上是问题本身.