Performance 运行sqlite查询后,如何加快获取结果的速度?

Performance 运行sqlite查询后,如何加快获取结果的速度?,performance,sqlite,fetchall,Performance,Sqlite,Fetchall,作为对我问题的回答:对于sqlite来说,似乎fetchall和fetchone的速度非常慢 正如我在这里提到的,我有以下疑问: time0 = time.time() self.cursor.execute("SELECT spectrum_id, feature_table_id "+ "FROM spectrum AS s "+ "INNER JOIN feature AS f "+ "ON f

作为对我问题的回答:对于sqlite来说,似乎fetchall和fetchone的速度非常慢

正如我在这里提到的,我有以下疑问:

time0 = time.time()
self.cursor.execute("SELECT spectrum_id, feature_table_id "+
                "FROM spectrum AS s "+
                "INNER JOIN feature AS f "+
                "ON f.msrun_msrun_id = s.msrun_msrun_id "+
                "INNER JOIN (SELECT feature_feature_table_id, min(rt) AS rtMin, max(rt) AS rtMax, min(mz) AS mzMin, max(mz) as mzMax "+
                             "FROM convexhull GROUP BY feature_feature_table_id) AS t "+
                "ON t.feature_feature_table_id = f.feature_table_id "+
                "WHERE s.msrun_msrun_id = ? "+
                "AND s.scan_start_time >= t.rtMin "+
                "AND s.scan_start_time <= t.rtMax "+
                "AND base_peak_mz >= t.mzMin "+
                "AND base_peak_mz <= t.mzMax", spectrumFeature_InputValues)
print 'query took:',time.time()-time0,'seconds'

time0 = time.time()
spectrumAndFeature_ids = self.cursor.fetchall()      
print time.time()-time0,'seconds since to fetchall'
select语句的执行大约需要50秒。但是,fetchall需要788秒,仅获取981个结果

作为对我的问题的回答,提出了加快查询速度的方法:使用fetchmany,并没有提高获取结果的速度

运行sqlite查询后,如何加快获取结果的速度

sql与我试图在命令行上执行的完全相同:

sqlite> SELECT spectrum_id, feature_table_id
   ...> FROM spectrum AS s 
   ...> INNER JOIN feature AS f 
   ...> ON f.msrun_msrun_id = s.msrun_msrun_id 
   ...> INNER JOIN (SELECT feature_feature_table_id, min(rt) AS rtMin, max(rt) AS rtMax, min(mz) AS mzMin, max(mz) as mzMax 
   ...> FROM convexhull GROUP BY feature_feature_table_id) AS t 
   ...> ON t.feature_feature_table_id = f.feature_table_id 
   ...> WHERE s.msrun_msrun_id = 1
   ...> AND s.scan_start_time >= t.rtMin
   ...> AND s.scan_start_time <= t.rtMax
   ...> AND base_peak_mz >= t.mzMin
   ...> AND base_peak_mz <= t.mzMax;
更新:

所以我大约45分钟前开始在命令行上运行查询,它仍然很忙,所以使用命令行时速度也很慢

从阅读中,听起来你可以从使用。不知何故,您可能是sqlite模块的受害者,导致您的查询以性能较差的方式执行

我很好奇,所以我试着自己使用apsw。这并不太复杂。你为什么不试试呢

要安装它,我必须:

提取数据。 让安装包获取最新的sqlite合并

python setup.py fetch --sqlite
构建并安装

sudo python setup.py install
使用它代替其他sqlite模块

import apsw
<...>
conn = apsw.Connection('foo.db')

通过客户端执行同一查询需要多少时间?另外,您使用的是哪个sqlite3 python模块?什么版本?模块使用的sqlite3版本是什么?我使用的是sqlite模块:2.6.3和sqlite版本:3.7.10。我试图通过SQLite管理器执行该命令,但它似乎无法处理它。只需使用客户端即可。您是在Windows还是UNIX/Linux上?我收到一个sql错误:sql错误:数据库架构格式错误-接近否:语法错误