SQLite-select表达式非常慢



我在SQLite中遇到了一些严重的查询性能问题。目前,activity_tbl表中约有20000个条目,activity_data_tbl

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.,查询会非常快

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

尝试在时间列上设置索引。这应该会加快查询的速度

此查询不可使用筛选器部分的索引进行优化,因为您是根据计算值进行筛选和排序的。要优化查询,您要么需要筛选一个实际的表列(起始时间或长度),要么在查询前预先计算时间值。

索引唯一有帮助的地方是b.data_id.

复合索引可能会有所帮助。根据其文档,如果索引有足够的信息,SQLite会尽量避免访问该表。因此,如果引擎做足了功课,它就会认识到索引足以计算where子句的值,并留出一些时间。如果它不起作用,只有预计算才能起作用。

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

最新更新