Учебники

26) Индексы

Что такое индекс?

Никто не любит медленные системы.

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

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

Но есть ограничения на инвестиции в оборудование, которые может сделать бизнес. 

Оптимизация вашей базы данных является более дешевым и лучшим решением.

Для этого мы можем использовать ИНДЕКСЫ.

Учебник по индексу MySQL - создание, добавление и удаление

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

 

Создать основной синтаксис индекса

Индексы могут быть определены двумя способами

1. Во время создания таблицы

2. После того, как таблица была создана

 

Пример:

Для нашего myflixdb мы ожидаем много поисков в базе данных на полное имя.

Мы добавим столбец «full_names» в индекс в новой таблице «members_indexed».

Сценарий, показанный ниже, помогает нам достичь этого.

CREATE TABLE `members_indexed` (
  `membership_number` int(11) NOT NULL AUTO_INCREMENT,
  `full_names` varchar(150) DEFAULT NULL,
  `gender` varchar(6) DEFAULT NULL,
  `date_of_birth` date DEFAULT NULL,
  `physical_address` varchar(255) DEFAULT NULL,
  `postal_address` varchar(255) DEFAULT NULL,
  `contact_number` varchar(75) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`membership_number`),INDEX(full_names)
) ENGINE=InnoDB;

Выполните вышеупомянутый сценарий SQL в MySQL рабочей среде против «myflixdb».  

Учебник по индексу MySQL - создание, добавление и удаление

Обновление myflixdb показывает вновь созданную таблицу с именем members_indexed.

У таблицы » note « members_indexed есть «full_names» в узле индексов.

По мере расширения базы элементов и увеличения количества записей поисковые запросы в таблице members_indexed, использующие предложения WHERE и ORDER BY, будут выполняться намного быстрее по сравнению с теми, которые выполняли таблицу members без определенного индекса.

 

Добавить основной синтаксис индекса

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

 Мы можем использовать следующий запрос, чтобы добавить индекс

CREATE INDEX id_index ON table_name(column_name);

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

CREATE INDEX `title_index` ON `movies`(`title`);

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

Это означает, что все поисковые запросы в таблице фильмов с использованием «заголовка» будут выполняться быстрее.

Однако поисковые запросы по другим полям в таблице фильмов будут медленнее по сравнению с поисковыми запросами на основе индексированного поля.

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

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

SHOW INDEXES FROM table_name;

Давайте теперь посмотрим на все индексы, определенные в таблице фильмов в myflixdb.

SHOW INDEXES FROM `movies`;

Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает нам следующие результаты, показанные ниже.

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

Удалить основной синтаксис индекса

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

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

DROP INDEX `index_id` ON `table_name`;

Давайте теперь посмотрим на практический пример.

DROP INDEX ` full_names` ON `members_indexed`;

Выполнение вышеуказанной команды удаляет индекс с идентификатором `full_names` из таблицы members_indexed.

Резюме

  • Индексы очень эффективны, когда дело доходит до значительного улучшения производительности поисковых запросов MySQL.
  • Индексы могут быть определены при создании таблицы или добавлены позже после того, как таблица уже была создана.
  • Вы можете определить индексы для более чем одного столбца в таблице.
  • SHOW INDEX FROM table_name используется для отображения определенных индексов в таблице.
  • Команда DROP используется для удаления определенного индекса в данной таблице.