radchenkoam / OTUS-postgres-2020-05

1 stars 3 forks source link

lesson #15 - 1 var #8

Closed radchenkoam closed 4 years ago

radchenkoam commented 4 years ago

Сбор и использование статистики

Домашнее задание Работа с индексами, join'ами, статистикой Цель: - знать и уметь применять основные виды индексов PostgreSQL - строить и анализировать план выполнения запроса - уметь оптимизировать запросы для с использованием индексов - знать и уметь применять различные виды join'ов - строить и анализировать план выполенения запроса - оптимизировать запрос - уметь собирать и анализировать статистику для таблицы

1 вариант: Создать индексы на БД, которые ускорят доступ к данным. В данном задании тренируются навыки:

radchenkoam commented 4 years ago
Занятие #15 - Домашнее задание - Вариант 1

Работа с индексами


1. Подготовка виртуальной машины


radchenkoam commented 4 years ago

2. Установка и настройка PostgreSQL 12


👍 Сервер PostgreSQL установлен и функционирует нормально

radchenkoam commented 4 years ago

3. Подготовка файлов для загрузки


radchenkoam commented 4 years ago

4. Создание БД и загрузка данных


radchenkoam commented 4 years ago

5. Работа с индексами


:link: Postgres EXPLAIN Visualizer (Pev) :link: explain.depesz.com

radchenkoam commented 4 years ago

Простой индекс

:warning: видно (Parallel Seq Scan on hire...), что оптимизатор не использует индексы, а последовательно сканирует таблицу

:warning: оптимизатор использует Index Scan по индексу _hire_start_dateidx

:+1: производительность запроса выросла, вместо 2,5 секунд он теперь выполняется за миллисекунды

radchenkoam commented 4 years ago

Индекс для полнотекстового поиска

:warning: видно (Parallel Seq Scan on hire...), что оптимизатор не использует индексы, а последовательно сканирует таблицу

:warning: оптимизатор использует Bitmap Index Scan по индексу _hire_ftidx

:+1: производительность запроса выросла, вместо почти 3-х минут он теперь выполняется за миллисекунды

Индекс на столбец с функцией для полнотекстового поиска

:+1: :warning: _за счет использования индекса для полнотекстового поиска на столбец скорость выполнения запроса улучшилась еще, но увеличился и размер таблицы public.hire с 3273 MB до 4595 MB (+1322 MB), индекс hire_ft_idx от использования столбца вместо выражения вырос немного -> +8 MB_

radchenkoam commented 4 years ago

Индекс на несколько полей (составной индекс)

:warning: оптимизатор использует Index Scan по индексу _hire_stationsidx

:+1: производительность запроса выросла, вместо 3.4 секунд он теперь выполняется за половину миллисекунды

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