问题sqlite not using index with like query是我能找到的最接近的问题,但我已经在使用最新版本的SQLite了:
sqlite> .version
SQLite 3.13.0 2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2
表格非常简单:
sqlite> .schema
CREATE TABLE test (id INTEGER PRIMARY KEY NOT NULL, size INTEGER NOT NULL, path TEXT NOT NULL);
CREATE UNIQUE INDEX idx_id ON test(id);
CREATE INDEX idx_size ON test(size);
CREATE UNIQUE INDEX idx_path ON test(path);
我从文件夹扫描中插入数据,然后尝试使用LIKE:
进行搜索sqlite> EXPLAIN QUERY PLAN SELECT * FROM test WHERE path LIKE "%Caprice%";
0|0|0|SCAN TABLE test
我尝试过使用NVARCHAR(路径是UTF-8字符串),将COLLATE NOCASE添加到路径,将PRAGMA case_sensitive_like设置为ON和OFF,但无论我做什么,它都坚持使用SCAN而不是SEARCH。
关于我可能做错的任何线索都非常受欢迎。
修改
让我澄清一点,我也尝试过使用:
sqlite> EXPLAIN QUERY PLAN SELECT * FROM test WHERE path LIKE "Caprice%";
0|0|0|SCAN TABLE test
以及:
sqlite> EXPLAIN QUERY PLAN SELECT * FROM test WHERE path LIKE "Caprice";
0|0|0|SCAN TABLE test
但是你可以看到它只是拒绝使用索引。
EDIT2:
The answer you are referring to正是我所寻找的,但问题标题是如此冗长以至于我可能永远不会想出正确的搜索词来找到它。感谢。