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

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

Некоторые из этих узких мест можно проследить до запросов к базе данных. Большая часть контента веб-сайта хранится в базе данных, например Mysql (которая является наиболее часто используемой базой данных в Интернете). Это означает, что каждый просмотр страницы, скорее всего, приведет к запросу к базе данных или даже к нескольким запросам.

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

Индексы созданы именно для этого сценария. Так что же такое индекс базы данных?

Что такое индекс базы данных

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

Итак, как индекс решает эту проблему?

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

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

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

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

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

Однако существуют разные типы индексов, и мы объясним каждый из них ниже.

Представьте себе штатное расписание с более чем 100 000 строками со структурой ниже:

staff_id -- primary key
first_name
last_name
phone_number
date_of_birth
salary
department
  • Индекс столбца

Представьте себе следующий запрос:

select * from staff where last_name like 'smit%'

Без индекса этот запрос будет сканировать таблицу, то есть проверять каждую запись в таблице и выбирать те, которые соответствуют критериям поиска. Как мы уже говорили ранее, это очень плохо сказывается на производительности запросов. Так что же нам делать? Мы создадим индекс для столбца
last_name, как показано ниже. Это синтаксис для создания индекса базы данных Mysql.

CREATE INDEX idx_last_name ON staff ('last_name');

Это создает индекс столбца в столбце last_name, что значительно ускоряет извлечение данных.

  • Уникальный индекс
  • Уникальный индекс накладывает уникальное ограничение на столбцы, на которых он определен. Это означает, что этот столбец (столбцы) не будет принимать повторяющиеся значения или, в случае уникального индекса с несколькими столбцами, он не будет принимать дубликаты одной и той же комбинации значений.
  • Уникальный индекс может быть установлен для столбца, такого как phone_number в таблице, определенной в начале этой статьи.
  • Уникальный индекс выглядит точно так же, как первичный ключ, поэтому какая разница, в таблице может быть определен только один первичный ключ, но может быть несколько уникальных индексов в нескольких столбцах. такие вещи, как номер телефона, номер автомобиля и т. д., обычно остаются уникальными.
  • Обратите внимание, что NULL рассматривается как уникальное значение.
  • Составной индекс
  • Это единый индекс, который объединяет один или несколько столбцов (индексы по нескольким столбцам). Предположим, мы выполняем следующий запрос
select * from staff where last_name like 'smit%' order by date_of_birth

Вышеупомянутый запрос работал бы лучше, если бы у нас был комбинированный индекс по двум столбцам last_name и date_of_birth.

Создайте комбинированный индекс, как показано ниже:

CREATE INDEX idx_last_name_and_date_of_birth ON staff (‘last_name’, date_of_birth);

Заключение

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

e.g

CREATE INDEX idx_last_name ON staff ('last_name');