С Sqlite3 я пытаюсь сделать запрос вроде:
select * from data
где instr (filepath, '. Txt')! = 0
И я хочучтобы проиндексировать этот запрос, чтобы ускорить его.
Я пытался создать такой индекс:
создать индекс data_instr_filepath для данных (instr (filepath, '. txt'));
Однако «план запроса объяснения» все еще показывает, что я выполняю сканирование таблицы.
Это выполнимо в sqlite?Примеры, которые я нашел для создания индексов на основе выражений, по-видимому, ограничены функцией длины и умножением двух столбцов.
ОБНОВЛЕНИЕ:
Благодаря ответу Майка я изменил свой запрос наиспользовать неравенства и смог создать индекс, который попадает в него.Ниже приведены мои индексы, которые я использовал в итоге:
create index data_instr_filepath_txt on data(instr(filepath,'.txt'));
create index data_instr_filepath_substr on data(substr(filepath,0,instr(filepath,'.')));