Вопрос о внешних ключах и пустых строках MYSQL - PullRequest
0 голосов
/ 29 марта 2011

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

Мой следующий вопрос об эффективности внешних ключей. Я всегда думал, что они создали индекс между одним ключом в таблице и соответствующим ключом в другой таблице, что, по сути, сделало линейный поиск при выполнении соединения.

Является ли внешний ключ гораздо более эффективным, чем просто наличие индекса, или они одинаковые?

Спасибо.

1 Ответ

1 голос
/ 29 марта 2011

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

первичный ключ неявно создает индекс.Не внешние ключи.В большинстве случаев рекомендуется добавлять индекс для столбца внешнего ключа.

ключи - это ограничения, гарантирующие согласованность данных, и использование индекса может повысить производительность доступа к данным.Так что это разные вещи, которые вы часто комбинируете на практике и, следовательно, часто путаете.

Относительно сиротских рядов Я думаю, что концепция ключей состоит в том, чтобы предотвратить это.Но я не совсем уверен, правильно ли я понимаю, что вы спрашиваете здесь.Я думаю, что добавление строк-сирот невозможно, а создание ключей, если строки-сироты существуют, звучит как-то невозможно.

см. Также другие вопросы о SO, относящиеся к теме внешнего ключа / индекса.Вот еще несколько хороших ответов , связанных с первичным ключом / ключом / индексом

...