我似乎无法让sqlite3使用带有LIKE子句和GROUP BY子句的查询的复合索引的TEMP B-TREE。似乎只使用WHERE子句的索引。我已尝试在索引中使用COLLATE NOCASE的所有组合制作索引,因为LIKE不区分大小写。
示例如下是foo,boo的索引。
SELECT foo, boo FROM mytable WHERE foo LIKE 'hi%' GROUP BY boo;
还尝试使用子查询,例如
SELECT foo, boo FROM (SELECT foo, boo FROM mytable WHERE foo LIKE 'hi%') GROUP BY boo;
有趣的是,ORDER BY在上面类似的子查询案例中起作用,但也不适用于直接查询。
任何帮助表示赞赏!
答案 0 :(得分:1)
> CREATE TABLE mytable(foo, boo, [...]);
> CREATE INDEX bfi ON mytable(boo, foo COLLATE NOCASE);
> EXPLAIN QUERY PLAN SELECT foo, boo FROM mytable WHERE foo LIKE 'hi%' GROUP BY boo;
0|0|0|SCAN TABLE mytable USING COVERING INDEX bfi