sql—sqlite中的查询性能较慢,但sqlite studio报告执行速度较快

x0fgdtte  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(236)

我有两个大的(约1亿行)表,我正试图加入。我在连接中使用的两列上都有索引。选择前1000行需要几个小时,但完成后,sqlitestudio报告只花了一分钟。然后,sqlitestudio还需要几个小时来计算结果的行数,如果我尝试打开另一个查询窗口,它在这几个小时内就没有响应了。在整个过程中,任务管理器显示了大约25%的cpu使用率和7-8mb/s的磁盘使用率。我还尝试了选择前10k行,完成这项工作需要11个小时,获取行数还需要11个小时,但报告查询在4分钟内完成。以下是查询:

Select d.PRC, s.prccd, abs(abs(d.PRC)-s.prccd), *
from dsf d
join secd.secd s
on s.datadate=d.DATE and substr(s.cusip,1,8)=d.CUSIP
where abs(abs(d.PRC)-s.prccd)>.0006
limit 10000

为什么要花这么长时间?我知道一亿行是很多,但排序索引,连接不应该发生在线性时间?添加索引需要几分钟,而不是几个小时,这应该是o(nlogn),因为它必须排序。我不使用substr()就得到了相同的结果。为什么要花这么长时间?
为什么sqlite studio报告只需要一两分钟?
为什么sqlitestudio在结果已经显示之后还要花这么长时间来计算结果行呢?
编辑:解释查询计划的输出

5   0   0   SCAN TABLE dsf AS d
7   0   0   SEARCH TABLE secd AS s USING INDEX secd_datadate (datadate=?)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题