sqlite和python中的内部连接需要较长的时间来执行

2024-04-19 02:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个名为geostat和res的表。我想对这两个表进行内部联接,并将结果存储到表中。我也知道sql查询,但是当我在python中使用sqlite时,执行查询似乎需要更长的时间(大约1小时,这不太好)。我想知道,既然它有一个内部连接,它是否需要更长的时间来执行?如何优化查询?你知道吗

我的sql查询是:

select res.[MaxOfState count percent], res.[grpno.], geostat.[state code] from res inner join geostat on res.[MaxOfState count percent] = geostat.[count percent] AND res.[grpno.] = geostat.[grpno.] 

我的表格如下:

geostat:
   count percent  grpno. state code
0          14.78       1         CA
1           0.00       2         CA
2           8.80       3         CA
3           9.60       4         FL
4          55.90       4         MA
5           0.00       2         FL
6           0.00       6         NC
7           0.00       5         NC
8           6.90       1         FL
9          59.00       4         MA
res:
   grpno.  MaxOfcount percent
0       1               14.78
1       2                0.00
2       3                8.80
3       4               59.00
4       5                0.00
5       6                0.00

现在,当我执行内部连接查询时,执行它需要一个多小时。我的python代码如下:

import pandas as pd
from sqlalchemy import create_engine # database connection
disk_engine = create_engine('sqlite:///fnma.db') # Initializes database with filename fnma.db in current directory
inner_join_geostat = pd.read_sql('select res.[MaxOfState count percent], res.[grpno.], geostat.[state code] from res inner join geostat on res.[MaxOfState count percent] = geostat.[count percent] AND res.[grpno.] = geostat.[grpno.]  ',disk_engine)
inner_join_geostat.to_sql('inner_join_geostat', disk_engine, if_exists='replace')

有人能告诉我如何优化查询/代码吗?你知道吗

我的解释查询计划如下:

selectid    order   from    detail
0           0       0       SCAN TABLE geostat_query_recent
0           1       1       SEARCH TABLE geostatdf_recent1 USING AUTOMATIC COVERING INDEX (STATE POOL NUMBER=? AND STATE COUNT PERCENT=?)

仅供参考:我还没有创建索引。你知道吗


Tags: andfromsqlcountcoderesengineca