Как работает добавление индексов на внешние ключи? - PullRequest
3 голосов
/ 15 декабря 2011

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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Я думаю, что в Википедии есть хорошее резюме того, что такое индексы и что они делают.Смотрите здесь: http://en.wikipedia.org/wiki/Index_%28database%29

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

Учтите этоПридуманный пример:

У меня есть таблица с именем employee:

Идентификатор сотрудника |Код сотрудника |Имя сотрудника

1 |0003 |Ричард
2 |0002 |Боб
3 |0008 |Тим

Я хочу присоединиться к отсортированному списку кодов сотрудников:

0003 0008

Это будет означать без индексов у вас есть эффективность поиска O (n2).С помощью таблицы, упорядоченной по Коду сотрудника, вы можете увидеть эффективность поиска, заданную бинарным деревом поиска: http://en.wikipedia.org/wiki/Binary_search_algorithm.По сути, он может найти 0003, угадав свое местоположение и обнаружив, что он становится все ближе, а не искать в каждой строке.

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

Возможно, вы захотите рассмотреть возможность удаления индексовкогда они вам больше не нужны, так как это влияет на размер базы данных.

0 голосов
/ 15 декабря 2011

Он ничем не отличается от индекса в любом другом поле. Это потенциально помогает оптимизатору находить определенные строки в этих таблицах. ФК часто используются в качестве полей соединения, поэтому в этих случаях они являются естественными кандидатами для индексации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...