Возможно ли создать временный индекс в sqlite?

#sqlite #indexing #temp

#sqlite #индексирование #temp

Вопрос:

Программа, над которой я работаю, может импортировать данные из другой программы (не нашей), которая использует файлы sqlite. Мне нужны индексы, которые еще не существуют в файлах sqlite, но я не хочу изменять чьи-либо данные только для того, чтобы они могли их импортировать. Индекс используется многими запросами. Таким образом, я хотел бы создать временный индекс, который существует только до тех пор, пока соединение

Я видел следующий очевидный синтаксис, на который ссылаются (в сообщениях списка рассылки от 2003 …):

 $ sqlite3 thirdparty.sqlite
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TEMP INDEX foo ON SomeTable(SomeCol);
Error: near "INDEX": syntax error
  

Возможно ли сделать что-то подобное? Прямо сейчас мы просто создаем копию файла перед импортом, но эти файлы могут быть довольно большими, так что это довольно непрактично.

Комментарии:

1. Если я могу предложить (на будущее, поскольку вопрос уже устарел), добавление и индексирование, удаление индекса и затем запуск VACUUM никоим образом не изменят базу данных. Вероятность повреждения данных также очень мала, что может произойти только в том случае, если на вашем диске есть поврежденные сектора.

Ответ №1:

ВРЕМЕННЫЕ индексы были временно добавлены, но вскоре удалены, поскольку согласованность не может быть гарантирована. Хотя это не должно быть проблемой, если индекс сохраняется только для транзакции (что приведет к исключительной блокировке и, следовательно, предотвратит модификацию), это не так, как они были реализованы. Итак, на момент написания этой статьи временные индексы недоступны для sqlite. Для получения дополнительной информации см. http://permalink.gmane.org/gmane.comp.db.sqlite.general/4827 .