我当前的查询看起来像这样:
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)。
是否有其他方法可以利用索引并为我提供一些更快的查询?
答案 0 :(得分:1)
与您的访问模式一致的一种策略是在表中添加新的索引列“first_letter”。使用触发器设置插入和更新时的值。然后您的查询是first_letter的简单组。
答案 1 :(得分:0)
另一种策略是创建一个包含母表聚合的影子表。这并不容易,因为保持影子表与母表一致是开发人员的工作。表文件中的每个删除,更新或插入都需要在影子表中进行更改。
像Oracle这样的数据库支持物化视图自动实现,但sqlite不支持。