我有类似的情况,如下面的问题。
SELECT MAX(id) id, cid FROM table GROUP BY cid
要优化上述查询(在问题中显示),创建索引(cid,id)就可以了。
但是,当我添加一个没有索引到SELECT的列时,查询速度会急剧减慢。
例如,
SELECT MAX(id) id, cid, newcolumn FROM table GROUP BY cid
如果我创建索引(cid,id,newcolumn),查询时间将恢复到最小。我似乎应该在使用GROUP BY时索引我选择的所有列。
除了索引要选择的所有列之外,还有其他方法吗?
答案 0 :(得分:1)
当查询中使用的所有列都是索引的一部分(后来称为covering index)时,SQLite可以从索引中获取所有值,而不需要访问表本身。
添加未编制索引的列时,必须在索引和表中查找每条记录。 此外,表中记录的顺序不太可能与索引中的顺序相同,因此表的页面不按顺序读取,并且多次读取,这意味着缓存也不会起作用。 / p>
必须从表或索引中读取newcolumn
值;没有其他机制来存储数据。
tl;博士:没有