Оптимизация внешнего ключа в SQLite

Я знаю, что SQLite не использует внешние ключи изначально, но это не моя основная проблема. Возникает вопрос: если я объявляю

CREATE TABLE invoice (
  invoiceID INTEGER PRIMARY KEY,
  clientID INTEGER REFERENCES client(clientID),
  ...
  )

будет sqlite хотя бы использовать информацию о том, что clientID является внешним ключом для оптимизации запросов и автоматически индексирует invoice.clientID, или это ограничение является реальным no-op?

Ответы

Ответ 1

Даже если на самом деле это не-op (структура данных, описывающая ограничение, добавляется в таблицу), оператор внешнего ключа не создает никакого индекса для задействованных столбцов. Индексы неявно создаются только в случае PRIMARY KEY и UNIQUE. Для получения дополнительной информации проверьте его модуль build.c в дереве исходных данных sqlite: http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/build.c

Ответ 2

В документации SQLite говорится:

... "должен быть создан индекс в столбцах дочернего ключа каждого ограничения внешнего ключа"

т. индекс не создается автоматически, но вы должны создать его в каждом экземпляре.