Как работает индекс БД? - PullRequest
       6

Как работает индекс БД?

1 голос
/ 15 октября 2011

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

Как это работает : -

Advantage2: - После прочтения обсуждения по приведенной выше ссылке одна вещь, которую помогает индекс, заключается в том, что он уменьшает количество блоков данных для итерации, как описано в примере 1.

Advantage1: - Но снова мне пришёл в голову один вопрос, после введения индекса он также должен искать индекс из таблицы индексов (которую любое внутреннее хранилище данных создает), что должно быть временем.снова.Итак, после дальнейшего чтения я обнаружил, что индекс хранится эффективным способом, обычно с использованием структуры данных, такой как B-деревья, через которые можно быстро перейти к любому значению, а после перехода к узлу он даст нам точное место в памяти для записи данного значенияв состоянии where или join. Правильно? Таким образом, в основном index sro сохраняет значение записи, для которой мы создаем индекс, и место в памяти фактической записи.

Когда это следует использовать:- КАК мы знаем, если мы создадим индекс для какого-либо столбца и если мы вставим / обновим / удалим какое-либо значение для этого столбца, индекс должен быть обновлен для этого столбца в таблице индексов.Так что это займет немного больше времени и памяти во время операции CUD.Поэтому, когда это следует использовать. Представьте, что мы создаем клиента по одному на экране пользователя. Таким образом, общее количество клиентов на конец дня составляет 1 миллион.Теперь, если мы хотим найти клиента, для которого принадлежит индекс NewYork.here, это очень поможет.Согласитесь, это немного замедлит работу клиента вставки, это будет незначительно плохо, но производительность, которую мы получим при поиске для клиента из Нью-Йорка, будет исключительно хорошей.

Пожалуйста, исправьте меня, если вы согласны / не согласныс вышеуказанным нахождением?

Ответы [ 3 ]

1 голос
/ 15 октября 2011

Предыдущие ответы (и ваши выводы) верны. Что касается того, когда использовать индексы, было бы легче обсудить, когда не использовать индексы. Вот несколько сценариев, в которых может не подходит для использования индекса.

  • Таблица, в которой вы делаете высокий уровень вставок, но никогда или редко выбираете из него. Примером такой таблицы может быть таблица журналирования определенного типа.

  • Очень маленькая таблица, все строки которой помещаются в один или несколько блоков.

1 голос
/ 16 октября 2011

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

Пример
У меня есть таблица с 1 000 000 000 строк.
id - это первичный ключ.
gender может быть male или female
city может быть одним из 50 вариантов.
street может быть множеством различных вариантов.

Когда я ищу уникальное значение, при использовании индекса это займет 30поиск по полностью сбалансированному дереву.
Без индекса в среднем потребуется 500 000 000 поисков.
Однако указание индекса по полу не имеет смысла, поскольку оно не сократит время поиска, достаточное для оправдания дополнительного времени, необходимого для использования.индекс, поиск элементов и чем получают данные в строках.

Для city это пограничный случай.Если у меня 50 разных городов, то индекс полезен, если у вас только 5, индекс имеет низкую мощность и не будет использоваться.

Индексы замедляют вставки и обновления.

Больше вещей для рассмотрения
MySQL может использовать только один индекс для (под) выбора в таблице.
Если вы хотите использовать индекс для:

SELECT * FROM table1 WHERE city = 'New York' AND Street = 'Hoboken' 

Вам нужно будет объявить составной индекс:

ALTER TABLE table1 ADD INDEX index_name (city, street)
1 голос
/ 15 октября 2011

Ваши общие выводы в значительной степени в порядке.

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

Да, тип индекса по умолчанию в Oracle реализован внутренне с использованием B-Tree .

Да, есть некоторые накладные расходы для операций Create / Update / Delete в таблице с индексами - как с точки зрения производительности, так и используемого пространства - но эти накладные расходы обычно незначительны и легко оправдываются, когда улучшение производительности запросов считается.

От всей души рекомендую прочитать Руководство по концепциям Oracle по индексам .

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