我有一个非常简单的查询:
SELECT count(id), min(id), max(id), sum(size), sum(frames), sum(catalog_size + file_size)
FROM table1
table1
包含大约3000到4000条记录。
我的问题是此查询运行大约需要20秒。由于它不止一次被调用,因此延迟对客户来说非常明显。
此查询是否正常需要20秒?有没有办法改善运行时间?
如果我从SQLite Manager运行相同的查询,则需要几毫秒才能执行。仅当从我们的软件调用查询时才会发生延迟。 EXPLAIN
和EXPLAIN QUERY PLAN
没有多大帮助。我们使用SQLite 3.7.3版本和Windows XPe。
有任何想法如何解决此问题或提高查询性能?
答案 0 :(得分:1)
所有sum
都要求必须读取表中的每条记录。
如果表包含的列数多于上面显示的列数,则从磁盘读取的数据包含有用和无用的值(特别是如果您有大blob)。在这种情况下,您可以尝试通过在此查询所需的列之上创建covering index来减少此查询所需的数据。
在3.7.15之前的SQLite版本中,您需要为第一个索引字段添加ORDER BY
以强制SQLite使用该索引,但这不适用于所有查询。 (对于您的查询,请尝试更新为this beta,或等待3.7.15。)