Индексы в реляционных БД на пальцах

Рассмотрим какова же роль индексов в реляционных БД на двух примерах не из ИТ области.

Думаю, что многие бывали в регистратурах больниц. Представьте себе, что медицинские карточки людей хранились бы на полках в абсолютно произвольном порядке, где нашлось свободное место, туда и положили. А теперь представьте сколько времени сотрудница регистратуры искала бы вашу карточку при таком подходе?

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

Недостаток этого примера заключается в том, что, по факту, ускорение происходит за счет особенности хранения карт, в БД это работает несколько иначе. Поэтому рассмотрим следующий пример. Предположим, что у нас на жестком диске в папке хранятся все наши музыкальные композиции. Да, в реальности никто так не делает, используя тот же принцип, который мы рассмотрели выше, все раскладывают файлы в различные папки по определенному принципу. Но чтобы наш пример чуть больше соотносился с реальными индексами БД, будем считать, что папка одна и в ней лежат 2.000 композиций. Как же нам отыскать среди них джазовые композиции? А вариантов нет, нам нужно будет перебрать все композиции. В реляционных базах данных это называется полным перебором. На небольших объемах данных это вполне уместно, поиск даже среди 10.000 записей может происходить достаточно быстро. А теперь представьте, что у вас есть дополнительный файл, в котором написаны номера композиций, которые относятся к джазу. Каждый раз, когда добавлялась бы новая композиция в папку с музыкой, кто-то проверял бы не относится ли она к джазу, и в случае положительного ответа записывал бы ее номер в этот самый дополнительный файл. В таком случае поиск джазовых композиций не являлся бы большой проблемой. Нечто похожее по принципу происходит и с индексами БД.

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

Вам также может понравиться...

Популярные посты