Оптимизация запросов
Ускорение запросов путем введения индексов
Сравним производительность
Селективность
Критерии
Типы сканирования
Как определить «точку перехода»
Как проверить наличие индекса в таблице
145.44K
Category: databasedatabase

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

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

▪Ускорение запросов путем введения
индексов.
▪Оценка селективности запроса.

2. Ускорение запросов путем введения индексов

3. Сравним производительность

Без индекса
С индексом

4. Селективность

I. Селективность столбца — это доля в нем
уникальных значений.
II. Селективность предиката — долю
столбца, возвращаемая условием WHERE.
Для оценки оптимизации запроса важен
именно второй тип.

5. Критерии

• Если условие выбирает заметно меньше 5%
строк — индекс, скорее всего, будет
эффективен.
• Если больше 10% — планировщик, вероятно,
выберет последовательное сканирование.
• Точная «точка перехода» в каждом
конкретном случае определяется стоимостной
моделью и может быть проверена через
EXPLAIN.

6. Типы сканирования

• Seq Scan — последовательное чтение всей таблицы.
Оптимально для маленьких таблиц или условий с низкой
селективностью.
• Index Scan — чтение через индекс.
Эффективно для высокоселективных условий, но может
быть медленнее при большом числе случайных
обращений к таблице.
• Bitmap Index Scan — промежуточный вариант для
средней селективности.
Может оказаться быстрее обоих предыдущих.

7. Как определить «точку перехода»

• Обновить статистику (гарантия того, что планировщик
будет принимать решения на основе актуального
распределения данных ):
ANALYZE tickets;
• Запусктаь команду EXPLAIN для запросов с разной
степенью селективности .
Например, для условия price > X, где X подбирается так,
чтобы охватить примерно 1%, 5%, 10%, 20% строк.
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM tickets WHERE price > 10000;
• При сравнении Execution Time для условий с разной
селективностью, эмпирически определяется точку, где
Index Scan начинает проигрывать Seq Scan .

8. Как проверить наличие индекса в таблице

English     Русский Rules