【问题标题】:What's the difference of normal index and FTS in SQLiteSQLite中普通索引和FTS有什么区别
【发布时间】:2020-11-29 12:31:19
【问题描述】:
两者都使用索引来加速字符串搜索。那么有什么区别呢?
在docs for CREATE INDEX 中,没有提到tokenization,这让我认为文本列上的普通索引只会加速“=”查询,而不是可以匹配段落内单词的更复杂的MATCH 查询,但我找不到任何证实这一点的来源。
【问题讨论】:
标签:
sqlite
indexing
full-text-search
【解决方案1】:
这让我认为文本列上的普通索引只会加快“=”查询
一般来说,文本列上的标准 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';
他们仍然可以从索引扫描而不是读取表中受益,但它不会像索引搜索那么快。
【解决方案2】:
文本中的短语顺序在正常查找中很重要,当您搜索时找不到'aaa bbb':
Select * from table where text like 'bbb aaa'
但是在全文搜索中你可以找到它。