SQLite - 选择表达式非常慢

时间:2012-04-04 15:25:56

标签: sql sqlite

我在SQLite中遇到一些查询性能问题。目前表 activity_tbl 中约有20000个条目,表 activity_data_tbl 中约有40个条目。我在下面的查询中使用了两个列的索引,但它似乎对性能没有任何影响。

SELECT a._id, a.start_time + b.length AS time 
FROM activity_tbl a INNER JOIN activity_data_tbl b 
       ON a.activity_data_id = b._data_id 
WHERE time > ? 
ORDER BY 2 
LIMIT 1

如您所见,我选择了一列和通过将两列相加而创建的值。我想这就是导致低性能的原因,因为如果我只选择a.start_time或b.length,查询速度非常快。

你们对我如何优化它有什么建议吗?

3 个答案:

答案 0 :(得分:0)

尝试在时间列上添加索引。这应该加快查询速度

答案 1 :(得分:0)

此查询无法使用过滤器部件的索引进行优化,因为您要对计算值进行过滤和排序。要优化查询,您需要在实际表列之一(开始时间或长度)上进行过滤,或者在查询之前预先计算时间值。

索引有用的唯一地方,我认为你有一个,在b.data_id上。

答案 2 :(得分:0)

复合指数可能有所帮助。根据其文档,如果索引有足够的信息,SQLite会尝试避免访问该表。因此,如果引擎完成其作业,它将识别出索引足以计算where子句值并节省一些时间。如果它不起作用,只会进行预计算。

如果您经常遇到类似的任务,请阅读:http://www.sqlite.org/rtree.html