Similar presentations:
Оптимизация запросов
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 .
database