【发布时间】:2020-01-24 00:19:06
【问题描述】:
在 SQLite 中可能会执行以下操作:
create INDEX idx on mytable (synopsis(20));
换句话说,索引不是全文字段?这对于我不想将所有内容都索引到内存中的长文本字段很有用(索引本身可能比整个表占用更多的空间)。
【问题讨论】:
标签: sql sqlite select indexing query-optimization
在 SQLite 中可能会执行以下操作:
create INDEX idx on mytable (synopsis(20));
换句话说,索引不是全文字段?这对于我不想将所有内容都索引到内存中的长文本字段很有用(索引本身可能比整个表占用更多的空间)。
【问题讨论】:
标签: sql sqlite select indexing query-optimization
您似乎在寻找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 个字符长...
【讨论】: