Проверяет понимание возможности создания частичных и функциональных индексов в базах данных для оптимизации запросов.
В реляционных базах данных, таких как 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';
-- Будет использован функциональный индексЧастичные индексы идеальны для таблиц с большим количеством строк, где часто фильтруют по статусу или другому булевому полю. Функциональные индексы незаменимы при поиске по преобразованным данным, например, регистронезависимый поиск. Используйте их, чтобы ускорить специфические запросы без увеличения накладных расходов на поддержку больших индексов.