假设我有这样的架构:
CREATE TABLE abc(
id INTEGER PRIMARY KEY AUTOINCREMENT,
txt TEXT
);
CREATE INDEX "txtCS" ON "abc"("txt" COLLATE MY_CUSTOM_SORT);
什么时候sqlite会在txt
上使用我的索引?
因为我跑了:
EXPLAIN QUERY PLAN SELECT * FROM abc ORDER BY txt COLLATE MY_CUSTOM_SORT DESC ...
它告诉我它使用txtCS
索引扫描表格两次(它不像我预期的那样搜索。)
MY_CUSTOM_SORT
是我自己的排序函数,我与sqliteCreateCollation
挂钩。我只需要一些涉及特殊排序的查询索引,我希望它们快速
答案 0 :(得分:1)
在EXPLAIN QUERY PLAN output中,SEARCH表示数据库尝试查找具有特定值的某些特定记录,而SCAN表示数据库遍历整个表。 此查询返回所有记录,因此最有效的操作是SCAN。
任何一项操作都可以通过索引来加速。 (在SCAN中,数据库按顺序遍历所有索引条目。)