优化获取SQLite中第一个字母分组的行数?

时间:2010-08-25 22:46:23

标签: iphone sqlite indexing

我当前的查询看起来像这样:

SELECT SUBSTR(name,1,1), COUNT(*) FROM files GROUP BY SUBSTR(name,1,1)

但是,对于已经由name列编制索引的表格进行计数需要花费很长时间。我从这个question看到一些引擎可能没有正确地为SUBSTR函数使用索引,事实上,sqlite will not use indexes for SUBSTR(string,1,1)

是否有其他方法可以利用索引并为我提供一些更快的查询?

2 个答案:

答案 0 :(得分:1)

与您的访问模式一致的一种策略是在表中添加新的索引列“first_letter”。使用触发器设置插入和更新时的值。然后您的查询是first_letter的简单组。

答案 1 :(得分:0)

另一种策略是创建一个包含母表聚合的影子表。这并不容易,因为保持影子表与母表一致是开发人员的工作。表文件中的每个删除,更新或插入都需要在影子表中进行更改。

像Oracle这样的数据库支持物化视图自动实现,但sqlite不支持。