Оптимизация внешнего ключа в SQLite - PullRequest
17 голосов
/ 05 июня 2009

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

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

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

Ответы [ 2 ]

28 голосов
/ 05 июня 2009

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

24 голосов
/ 08 июня 2011

В документации SQLite написано:

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

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

...