#6 – Индексы, оптимизация и анализ запросов

#6 – Индексы, оптимизация и анализ запросов

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

Видеоурок

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


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

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


Создать индекс можно с помощью команды:

CREATE INDEX idx_orders_price ON orders(price);

Теперь PostgreSQL сможет использовать этот индекс, когда вы фильтруете данные по price:

SELECT * FROM orders WHERE price > 1000;

Важно помнить, что индекс не ускоряет все запросы. Он эффективен только при фильтрации, сортировке или поиске по колонке, на которую он создан.


Типы индексов

PostgreSQL поддерживает несколько видов индексов:

  • BTREE — стандартный тип, используется по умолчанию (для <, >, =).
  • HASH — быстрый поиск по равенству, но редко применяется.
  • GIN / GiST — для полнотекстового поиска, JSON и сложных структур данных.


Когда индекс не помогает?

Если таблица маленькая, PostgreSQL может решить, что быстрее прочитать всю таблицу (Seq Scan), чем использовать индекс. Индексы также не используются, если в запросе участвуют функции над полем, например:

SELECT * FROM users WHERE LOWER(email) = '[email protected]';

В таких случаях можно создать функциональный индекс:

CREATE INDEX idx_users_lower_email ON users(LOWER(email));


Как узнать, используется ли индекс?

Для анализа запросов в PostgreSQL есть команды EXPLAIN и EXPLAIN ANALYZE.

EXPLAIN SELECT * FROM orders WHERE price > 1000;

Эта команда покажет план выполнения запроса. Чтобы увидеть реальные цифры (время и количество строк), используйте:

EXPLAIN ANALYZE SELECT * FROM orders WHERE price > 1000;

Если вы видите Index Scan — значит, индекс используется. Если Seq Scan — PostgreSQL выполняет последовательное чтение всей таблицы.


Оптимизация запросов

Чтобы запросы работали быстро, придерживайтесь нескольких правил:

  • Создавайте индексы только на те колонки, которые часто участвуют в фильтрах и сортировках.
  • Используйте EXPLAIN ANALYZE для анализа долгих запросов.
  • Не злоупотребляйте индексами — каждый индекс замедляет операции INSERT и UPDATE.
  • Периодически выполняйте VACUUM ANALYZE для обновления статистики оптимизатора.

Исходный код

Весь код будет доступен после подписки на проект!

Задание к уроку

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

Большое задание по курсу

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

Также стоит посмотреть

Уроки Java для профессионалов
14 уроков
Программа на C# .NET Windows Forms
7 уроков
Уроки SQL для начинающих
8 уроков
Изучение C# WPF на практике. Создание программ на C#
10 уроков
Видеокурс по PHP, MySQL / Создание динамического сайта
Изучение MongoDB / Работа с базой данных
8 уроков
Комментарии
Добавить комментарий

Пока комментариев нет