在sqlite中使用自定义归类的索引

时间:2014-01-06 03:36:33

标签: sqlite indexing sql-order-by collation

假设我有这样的架构:

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挂钩。我只需要一些涉及特殊排序的查询索引,我希望它们快速

1 个答案:

答案 0 :(得分:1)

EXPLAIN QUERY PLAN output中,SEARCH表示数据库尝试查找具有特定值的某些特定记录,而SCAN表示数据库遍历整个表。 此查询返回所有记录,因此最有效的操作是SCAN。

任何一项操作都可以通过索引来加速。 (在SCAN中,数据库按顺序遍历所有索引条目。)