【问题标题】: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'
    

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

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多