Индекс на часть столбца в SQLite - PullRequest
1 голос
/ 24 сентября 2019

Возможно ли в SQLite сделать что-то вроде следующего:

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

Другими словами, индексирование чем-то меньшим, чем полнотекстовое поле?Это полезно для длинных текстовых полей, где я не хочу индексировать все в память (сам индекс может занимать больше места, чем вся таблица).

1 Ответ

2 голосов
/ 24 сентября 2019

Вы, похоже, ищете индекс для выражения :

Используйте оператор 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 символов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...