Postgres зазвичай покладається на рішення свого оптимізатора і рідко звертається до підказок до індексів. Однак, можна налаштувати оптимізатор так, щоб він використовував індекси: Заохочуйте використання індексів великих обсягів даних командою SET enable_seqscan = OFF; .
Індекс використовує інше сортування Давайте подивимося. Ми бачимо, що індекс не використовувався. Це тому, що індекс зберігає рядки в іншому порядку, ніж запит. Завжди налаштовуйте індекси відповідно до ваших запитів, щоб уникнути невідповідностей, подібних до цього.
Швидка відповідь Розпізнавання використання індексів у PostgreSQL досягається за допомогою застосування подання pg_stat_user_indexes та таблиці pg_index . Це дозволяє виявити надлишкові індекси і ті, які задіяні дуже рідко.
11.2. індексів
- PostgreSQL підтримує кілька типів індексів: B-дерево, хеш, GiST, SP-GiST та GIN. …
- B-дерева можуть працювати в умовах на рівність та перевірках діапазонів з даними, які можна відсортувати в деякому порядку.
Хеш-індекси призначені в першу чергу для навантаження з великою кількістю операцій SELECT та UPDATE, які виконують сканування з перевіркою рівності для великих таблиць. В індексі-B-дереві пошук повинен проходити по дереву, доки не буде знайдена листова сторінка.
Як виявити недійсні індекси? Ви можете знайти всі недійсні індекси, виконавши наступний запит: SELECT * FROM pg_class, pg_index WHERE pg_index. indisvalid = false AND pg_index .
Індекс – це спосіб ефективного вилучення відносно невеликої кількості рядків з таблиці. Він корисний тільки у тому випадку, якщо кількість рядків, які необхідно витягти з таблиці, відносно невелика (тобто умова вилучення рядків – пропозиція WHERE – є селективною). Індекси B-дерева також корисні для уникнення сортування.
Щоб створити індекс у PostgreSQL, використовуйте команду CREATE INDEX із синтаксисом: CREATE INDEX index_name ON table_name(column_name); . Індекси допомагають прискорити вилучення даних за рахунок скорочення обсягу даних, які скануються під час запитів.