【问题标题】:Index on part of a column in SQLiteSQLite 中列的部分索引
【发布时间】:2020-01-24 00:19:06
【问题描述】:

在 SQLite 中可能会执行以下操作:

create INDEX idx on mytable (synopsis(20));

换句话说,索引不是全文字段?这对于我不想将所有内容都索引到内存中的长文本字段很有用(索引本身可能比整个表占用更多的空间)。

【问题讨论】:

    标签: sql sqlite select indexing query-optimization


    【解决方案1】:

    您似乎在寻找index on expression

    使用CREATE INDEX 语句在一个或多个表达式上创建新索引,就像在列上创建索引一样。唯一的区别是表达式被列为要索引的元素而不是列名。

    考虑:

    CREATE INDEX idx ON mytable(SUBSTR(synopsis, 1, 20)); 
    

    请注意,如文档中所述,要让 sqlite 查询计划器考虑此索引,您需要使用创建索引时给出的完全相同的表达式。

    所以这个查询将使用索引:

    SELECT * FROM mytable WHERE SUBSTR(synopsis, 1, 20) = 'a text with 20 chars';
    

    虽然这通常不会:

    SELECT * FROM mytable WHERE synopsis LIKE 'a text with 20 chars%';
    

    注意:是的,'a text with 20 chars' 20 个字符长...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多