Какова цель неуникальных индексов в базе данных?

Я искал вокруг, но не могу найти подходящего объяснения концепции уникальных и неуникальных индексов в базе данных.

В Rails, например, вы можете создавать уникальные и неуникальные индексы для заданного поля, как описано в http://railsguides.net/advanced-rails-model-generators/

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

Скажем, например, я храню электронные письма в таблице и хочу проиндексировать их позиции значений. Если до сих пор я понял это правильно, в случае, если у меня есть неуникальные индексы, тогда БД может иметь [email protected], проиндексированный в позиции 150, а [email protected] также проиндексирован в позиции 150. Итак, если я в конечном итоге скажем 100 разные значения в позиции 150, разве это не противоречит цели индексации в первую очередь, если БД все равно придется искать все значения в позиции 150, чтобы найти точную запись, которая мне нужна?

Как это понимать??

Спасибо


person jj_    schedule 20.10.2014    source источник
comment
Проверьте это richardfoote.wordpress.com/2007/12/18/   -  person maximus ツ    schedule 20.10.2014
comment
Да, на самом деле я нашел эту статью, но она написана таким ненужным усложнением для основного вопроса, что я спрашиваю, что я не мог пройти через это: удаление/отключение ограничения, контролируемого автоматически созданным уникальным индексом, приводит к тому, что индекс быть удалено, если вы забудете предложение KEEP INDEX. ...   -  person jj_    schedule 20.10.2014


Ответы (2)


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

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

person Noel Walters    schedule 20.10.2014

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

Индекс базы данных не является индексом в том же смысле, что и индекс массива, и индексированные значения в базах данных не обязательно связаны с конкретным числом (или индексом).

Индекс базы данных на самом деле представляет собой структуру данных, которая хранит (обычно отсортированные) данные и обеспечивает быстрый доступ к определенным значениям, поэтому индексы не создаются по умолчанию, поскольку эти структуры данных занимают место и должны создаваться только при необходимости. . Если вы хотите изучить такую ​​структуру данных, вы можете взглянуть на деревья B+, которые являются одной из наиболее распространенных структур данных, используемых при индексировании.

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

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

person Ahmed Osama    schedule 27.09.2016