2

我在 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,查询会非常快。

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

4

3 回答 3

0

This query is not optimizable using indexes for the filter part since you are filtering and ordering on a calculated value. To optimize the query you will either need to filter on one of the actual table columns (starttime or length) or pre-compute the time values before querying.

The only place an index will help, and I assume you have one, is on b.data_id.

于 2012-04-04T15:51:05.130 回答
0

尝试在时间列上放置一个索引。这应该加快查询

于 2012-04-04T15:32:23.877 回答
0

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

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

于 2013-12-02T17:00:58.843 回答