我在SQLite中遇到了一些严重的查询性能问题。目前,activity_tbl表中约有20000个条目,activity_data_tbl 正如您所看到的,我选择了一列和一个通过将两列相加而创建的值。我想这就是导致低性能的原因,因为如果我只选择a.start_time或b.length.,查询会非常快 你们对我如何优化这个有什么建议吗?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
尝试在时间列上设置索引。这应该会加快查询的速度
此查询不可使用筛选器部分的索引进行优化,因为您是根据计算值进行筛选和排序的。要优化查询,您要么需要筛选一个实际的表列(起始时间或长度),要么在查询前预先计算时间值。
索引唯一有帮助的地方是b.data_id.
复合索引可能会有所帮助。根据其文档,如果索引有足够的信息,SQLite会尽量避免访问该表。因此,如果引擎做足了功课,它就会认识到索引足以计算where子句的值,并留出一些时间。如果它不起作用,只有预计算才能起作用。
如果您经常遇到类似的任务,请阅读以下内容:http://www.sqlite.org/rtree.html