我在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,查询速度非常快。
你们对我如何优化它有什么建议吗?
答案 0 :(得分:0)
尝试在时间列上添加索引。这应该加快查询速度
答案 1 :(得分:0)
此查询无法使用过滤器部件的索引进行优化,因为您要对计算值进行过滤和排序。要优化查询,您需要在实际表列之一(开始时间或长度)上进行过滤,或者在查询之前预先计算时间值。
索引有用的唯一地方,我认为你有一个,在b.data_id上。
答案 2 :(得分:0)
复合指数可能有所帮助。根据其文档,如果索引有足够的信息,SQLite会尝试避免访问该表。因此,如果引擎完成其作业,它将识别出索引足以计算where子句值并节省一些时间。如果它不起作用,只会进行预计算。
如果您经常遇到类似的任务,请阅读:http://www.sqlite.org/rtree.html