SQLite中普通索引和FTS有什么区别

What's the difference of normal index and FTS in SQLite

两者都使用索引来加速字符串搜索。那有什么区别呢?

docs for CREATE INDEX 中,没有提到 tokenization,这让我觉得文本列上的普通索引只会加速“=”查询,而不是更复杂的 MATCH查询可以匹配段落内的单词,但我找不到任何来源证实这一点。

which makes me think that normal indices on text columns only speed up "=" queries

一般情况下,文本列上的标准 B-Tree 索引会加速 SARGable 查询,例如:

SELECT col FROM tab WHERE col = 'value'
SELECT col FROM tab WHERE col LIKE 'value'
SELECT col FROM tab WHERE col LIKE 'value%'

但不是:

SELECT col FROM tab WHERE col LIKE '%value%';  
SELECT col FROM tab WHERE col LIKE '%value';
SELECT col FROM tab WHERE UPPER(col) = 'VALUE';

他们仍然可以受益于索引扫描而不是阅读 table,但它不会像索引搜索那样快。

文本中的短语顺序在正常查找中很重要,当您搜索以下内容时找不到 'aaa bbb'

Select * from table where text like 'bbb aaa'

但在全文搜索中您可以找到它。