gpt4 book ai didi

performance - sqlite.fetchall() 这么慢是正常的吗?

转载 作者:行者123 更新时间:2023-12-03 17:50:10 26 4
gpt4 key购买 nike

我有一个从两个内部连接表中选择的 sql 查询。 select 语句的执行大约需要 50 秒。但是, fetchall() 需要 788 秒,并且只获取 981 个结果。这是查询和 fetchall 代码:

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'

fetchall 需要这么长时间有什么原因吗?

更新

正在做:
while 1:
info = self.cursor.fetchone()
if info:
<do something>
else:
break

速度和速度一样慢
allInfo = self.cursor.fetchall()         
for info in allInfo:
<do something>

最佳答案

默认 fetchall()与循环 fetchone() 一样慢由于 arraysizeCursor对象设置为 1。

为了加快速度,你可以循环 fetchmany() ,但要看到性能提升,您需要为其提供大于 1 的大小参数,否则它将按 arraysize 的批处理获取“许多” ,即 1。

您很可能只需提高 arraysize 的值即可获得性能提升。 ,但我没有这样做的经验,因此您可能想先通过以下方式进行试验:

>>> import sqlite3
>>> conn = sqlite3.connect(":memory:")
>>> cu = conn.cursor()
>>> cu.arraysize
1
>>> cu.arraysize = 10
>>> cu.arraysize
10

更多关于上述内容: http://docs.python.org/library/sqlite3.html#sqlite3.Cursor.fetchmany

关于performance - sqlite.fetchall() 这么慢是正常的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com