Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: partial index, functional index, index condition, postgresql

Могут ли индексы создаваться по условию или с использованием функции?

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

Короткий ответ

Да, индексы могут создаваться по условию (частичные индексы) и с использованием функций (функциональные индексы). Частичные индексы содержат только строки, удовлетворяющие условию WHERE, что уменьшает размер индекса и ускоряет запросы. Функциональные индексы хранят результат выражения или функции, что позволяет эффективно искать по вычисляемым значениям.

Длинный ответ

Что такое частичные и функциональные индексы?

В реляционных базах данных, таких как PostgreSQL, индексы не обязательно должны покрывать все строки таблицы или только сырые значения столбцов. Можно создавать индексы, которые включают только часть данных (частичные индексы) или индексируют результат функции (функциональные индексы). Это мощные инструменты для оптимизации производительности запросов.

Частичные индексы

Частичный индекс создается с условием WHERE. Он содержит только строки, удовлетворяющие этому условию. Это уменьшает размер индекса и ускоряет операции поиска, особенно если запросы часто фильтруют по определенному критерию.

CREATE INDEX idx_active_users ON users (email) WHERE status = 'active';

SELECT * FROM users WHERE status = 'active' AND email = 'test@example.com';
-- Будет использован частичный индекс

Функциональные индексы

Функциональный индекс создается на основе выражения или функции, а не напрямую на столбце. Это полезно, когда запросы используют функции в условиях WHERE, так как обычный индекс не будет использован.

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

SELECT * FROM users WHERE LOWER(email) = 'test@example.com';
-- Будет использован функциональный индекс

Применение и вывод

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#partial index

#functional index

#index condition

#postgresql

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.