Ответ
GIN (Generalized Inverted Index) — это тип индекса в PostgreSQL, оптимизированный для работы с составными или сложными типами данных, такими как массивы, JSON, полнотекстовый поиск. Он позволяет эффективно искать элементы внутри таких структур.
Особенности:
- Поддерживает операции
@>,<@,&&(содержит, содержится в, пересекается). - Особенно полезен для JSONB, hstore, массивов.
- Может быть медленнее при вставке/обновлении, чем B-tree, но быстрее в сложных запросах.
Пример для JSONB:
CREATE TABLE products (
id SERIAL PRIMARY KEY,
data JSONB
);
CREATE INDEX idx_gin ON products USING GIN (data);
-- Поиск по ключу в JSON
SELECT * FROM products WHERE data @> '{"tags": ["electronics"]}';